Я строю свою модель предметной области и продолжаю ее рефакторинг. По мере того, как я это делаю, я обнаруживаю, что мне нравятся интерфейсы, поскольку они позволяют мне создавать повторно используемые методы / контроллеры / представления для конкретных типов на основе их интерфейсов. Однако я обнаружил, что создаю интерфейс каждый раз, когда добавляю новое свойство к одному из объектов моего домена.
Например, у меня есть объект MemberStatus , который наследуется от абстрактного объекта Entity , который, в свою очередь, реализует интерфейс IIdentifiableEntity , что означает, что он имеет свойство Id . MemberStatus также реализует интерфейс INamedEntity , что означает, что у него есть свойство Name, интерфейс IOrderedEntity означает, что у него есть свойство DisplayOrder, и интерфейс IHasMembers , что означает, что он имеет Коллекция объектов-членов. Вот код:
public class MemberStatus : Entity, INamedEntity, IOrderedEntity, IHasMembers
{
public string Name { get; set; }
public float DisplayOrder { get; set; }
public ICollection<Member> Members { get; set; }
}
public abstract class Entity : IIdentifiableEntity
{
public int Id { get; set; }
}
public interface IIdentifiableEntity
{
int Id { get; set; }
}
public interface INamedEntity
{
string Name { get; set; }
}
public interface IOrderedEntity
{
float DisplayOrder { get; set; }
}
public interface IHasMembers
{
ICollection<Member> Members { get; set; }
}
Теперь, похоже, это работает нормально, как и другие подобные объекты, такие как MemberPosition и MemberTeam , которые все реализуют те же интерфейсы, и я могу использовать свои методы репозитория и действия контроллера с универсальными шаблонами, которые реализуют эти интерфейсы и имеют много повторного использования кода.
Однако меня беспокоит, целесообразно ли добавлять простые интерфейсы с одним свойством каждый раз, когда я добавляю новое свойство к своим конкретным объектам. Например, допустим, я хочу добавить свойство bool Enabled
... следует ли мне продолжать создавать интерфейс IEnabled ? Причина, по которой я спрашиваю, заключается в том, что некоторые из «инициализаторов» контроллеров, которые используют универсальные шаблоны, становятся очень длинными, как показано в следующей строке кода. Это нормально и рекомендуется?
public abstract class OrderedCrudController<TEntity> : CrudController<TEntity> where TEntity : Entity, INamedEntity, IOrderedEntity, IHasMembers, new()