По большей части я бы советовал против любых базовых классов для вашего домена. Если у вас есть иерархия классов, возможно, у вас более технический или каркасный домен, но даже там вы должны предпочесть композицию над наследованием .
Я бы, например, не использовал BaseEntity
, так как считаю его излишним. Закрытия, которые вы могли бы сделать, это, возможно, что-то вроде IRepository<T>
с T Get(Guid id)
и void Save(T instance)
методом, но вам придется подумать, где именно вы бы использовали что-то подобное. Вы можете четко обозначить свои роли, следуя принципу единственной ответственности и указав IRepositoryGet
и IRepositorySave
. Тем не менее, этот тип интерфейсов полезен только тогда, когда у вас есть некоторая общая общность между объектами, а этого обычно не происходит. Вы можете обнаружить, что некоторые данные lookup , похоже, вписываются в это пространство, но даже там вы можете захотеть создать общий репозиторий, а не отдельные репозитории для каждого типа.
Чего вам определенно нужно избегать, так это иметь грубый интерфейс, а затем выбрасывать различные NotImplementedException
. Когда вы обнаружите, что вы делаете это, достаточно разделить интерфейсы на более детальные версии и реализовать только нужные интерфейсы. Таким образом, вы можете использовать безопасное приведение, чтобы убедиться, что интерфейс реализован перед вызовом метода.