Я создаю свою модель домена и продолжаю реорганизовывать ее. Как и я, я считаю, что мне нравятся интерфейсы, поскольку он позволяет мне создавать многоразовые методы/контроллеры/представления для конкретных типов на основе их интерфейсов. Тем не менее, я нахожу, что я создаю интерфейс каждый раз, когда добавляю новое свойство к одному из объектов моего домена.
Например, у меня есть объект MemberStatus, который наследуется от абстрактного объекта Entity, который, в свою очередь, реализует интерфейс IIdentifiableEntity, что означает, что он имеет свойство Id. MemberStatus также реализует интерфейс INamedEntity, означающий, что у него есть свойство Name, интерфейс IOrderedEntity, означающий, что у него есть свойство DisplayOrder и интерфейс IHasMembers, что означает что у него есть объекты коллекции Collection. Здесь код:
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()