Я пишу основополагающие классы для приложения и хочу правильно их построить для долговременной ремонтопригодности. С этой целью я исследую, какие шаблоны проектирования реализовать, использовать интерфейсы, абстрактные классы и отделить упорство от активности. Моя голова плавает с узорами, парадигмами и принципами.Должен ли я разделять свойства и методы в частичных классах?
У меня есть класс Product
, для которого я создал интерфейс IProduct
. Я считаю, что мне нужно сделать Product
и абстрактный класс, потому что любой экземпляр его должен быть одним из полдюжины значений для свойства Category
. Итак, мой первый вопрос: следующий способ сделать это?
abstract class Product : IProduct
{
// Fields
// Properties
// Methods
}
interface IProduct
{
// Properties
}
public class Model : IProduct
{
public Model()
{
Category = "Model";
}
// Model-specific fields
// Model-specific properties
// Model-specific methods
}
Статьи, которые я прочитал, включая вопросы ранее ответы здесь, показывают, что я должен разработать с выделением свойств и методов (устойчивость и активность). С этой целью, должен ли приведенный выше код действительно выглядеть?
abstract class Product : IProduct
{
// Fields
// Properties
// Methods
}
interface IProduct
{
// Properties
}
public partial class Model : IProduct
{
public Model()
{
Category = "Model";
}
// Model-specific fields
// Model-specific properties
}
public partial class Model : IProduct
{
// Model-specific methods
}
Конечно, это предполагает, я получил первую часть правильно, но, возможно, ответы будут просветить меня о том, как я должен делать вещи.
И, наконец, если разделение свойств и методов является хорошей вещью, а Product
имеет некоторые методы, применимые ко всем конкретным версиям, следует ли перенести их в отдельный абстрактный класс?
abstract class Product : IProduct
{
// Fields
// Properties
}
abstract class Product : IProduct
{
// Methods
}
Я лично никогда не чувствовал необходимости создавать несколько частичных классов для разделения свойств и методов. Я не понимаю. Вы могли бы пойти еще дальше и начать разделять открытый интерфейс с частным в еще более частичных классах. Я думаю, что это не делает ничего, кроме того, что код * сложнее поддерживать, добавляя кучу бесполезных когнитивных накладных расходов. Получайте удовольствие, прыгая между файлами/много строк, чтобы понять поток данной функции. Просто держите вещи разделенными в определении класса логически и должны быть последовательными. –
"* persistence and activity *" - Я думаю, что это «java-way» обработки: наличие сущностей (* немых данных-структур *) и сервисов (* работа с сущностями *). В C# я никогда их не разделял - и в конце это просто личное предпочтение, если вы хотите называть 'user.Save()' или 'userService.Save (user);' – dognose
Все зависит от того, что вам нужно. Является ли оно ориентированным на приложение на основе пользовательского интерфейса или «основополагающим», вы имеете в виду базовую структуру кода? –