Меня беспокоит, что я добавляю слишком много интерфейсов

Я строю свою модель предметной области и продолжаю ее рефакторинг. По мере того, как я это делаю, я обнаруживаю, что мне нравятся интерфейсы, поскольку они позволяют мне создавать повторно используемые методы / контроллеры / представления для конкретных типов на основе их интерфейсов. Однако я обнаружил, что создаю интерфейс каждый раз, когда добавляю новое свойство к одному из объектов моего домена.

Например, у меня есть объект 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()
20
задан ColinE 20 January 2012 в 17:09
поделиться