Я создаю модель своего домена и продолжаю ее рефакторинг. Как и я, я обнаружил, что мне нравятся интерфейсы, так как это позволяет мне создавать повторно используемые методы / контроллеры / представления для конкретных типов на основе их интерфейсов. Тем не менее, я обнаружил, что создаю интерфейс каждый раз, когда добавляю новое свойство к одной из моих сущностей домена.
Например, у меня есть 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()