я могу использовать общие услуги в доменном сервисе с другим бизнесом или нет? - PullRequest
0 голосов
/ 26 мая 2019

У меня проблема с созданием универсального доменного сервиса или нет ??У меня есть «BaseEntity», который наследует любую сущность от него, и каждый момент был установлен значение при вызове метода обновления или вставки в хранилище .my уровень службы домена, который реализует каждый бизнес сущности.моя проблема заключается в том, что я должен делать, когда у меня есть один бизнес, который реализуется в каждой службе в домене service.can я использую универсальный класс и интерфейс для управления BaseEntity, а затем меняю бизнес, например, для метода Update, переопределяет базовый метод обновления, или я использовал для каждогосущность один сервисный класс с одним интерфейсом с отдельным бизнесом ???

1 Ответ

0 голосов
/ 27 мая 2019

По большей части я бы советовал против любых базовых классов для вашего домена. Если у вас есть иерархия классов, возможно, у вас более технический или каркасный домен, но даже там вы должны предпочесть композицию над наследованием .

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

Чего вам определенно нужно избегать, так это иметь грубый интерфейс, а затем выбрасывать различные NotImplementedException. Когда вы обнаружите, что вы делаете это, достаточно разделить интерфейсы на более детальные версии и реализовать только нужные интерфейсы. Таким образом, вы можете использовать безопасное приведение, чтобы убедиться, что интерфейс реализован перед вызовом метода.

...