2016-09-21 3 views
0

Где должны выполняться реализации службы домена в структуре проекта DDD? Если у нас есть реализация IDomainInterface и DomainInterface, должна ли реализация DomainInterface быть частью инфраструктуры или ядра/домена решения/проекта?DDD: Где разместить реализацию доменных служб

ответ

2

Домены службы домена и их реализация могут находиться в доменном слое. Однако, если реализация службы домена зависит от требований к инфраструктуре, то, применяя принцип инверсии зависимостей, реализация будет жить на уровне инфраструктуры, в то время как в зависимости от интерфейса, определенного в домене.

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

Хранилища являются наиболее распространенными службами домена, требующими знания в области инфраструктуры, и поэтому вы найдете их реализацию, живущую на уровне инфраструктуры, но есть и другие примеры.

Например, в идентификации & доступа в IDDD в ограниченном контексте EncryptionService интерфейса жизни в области в то время как конкретная реализация MD5EncryptionService живет в инфраструктуре.

+0

Доменные службы не имеют ничего общего с инфраструктурой –

+1

Только инфраструктура касается, например. репозиторий, будет реализован на уровне инфраструктуры. Служба домена и ее взаимодействие с репозиторием будут реализованы на уровне домена. [AuthorizationService] (https://github.com/VaughnVernon/IDDD_Samples_NET/blob/90fcc52d9c1af29640ec2a8a3e0e7c692f3e6663/iddd_identityaccess/Domain.Model/Access/AuthorizationService.cs) из [Реализация проекта, управляемого доменом] (https://www.amazon.com/Implementing-Domain-Driven-Design-Vaughn-Vernon/dp/0321834577) является одним из таких примеров. – Martin4ndersen

+0

@AlexeyZimarev Репозиторий - это служба домена. Большинство доменных служб не должны зависеть от деталей инфраструктуры, хотя некоторые из них будут.Например, у вас может быть служба домена шифрования в ограниченном контексте Identity & Access, где реализация поддерживается в инфраструктуре, поскольку она использует некоторую стороннюю библиотеку шифрования. – plalx

1

Как интерфейс, так и реализация службы домена должны находиться на уровне домена (ядра). Более конкретно интерфейс и реализация должны находиться в одном модуле (пространстве имен) в качестве объектов домена, используемых службой.

Место реализации - это то, что определяет, какой тип обслуживания он представляет, например, приложение, домен или инфраструктуру.

Остерегайтесь моделирования концепций домена как служб, так как это может привести к anemic domain model, где логика домена находится в сервисах, а не в объектах и ​​объектах значений.

+0

Этот ответ крайне неверен. Например, репозиторий - это служба домена, и его реализация не должна жить в домене. – plalx

+0

Я согласен с тем, что реализация репозитория не должна жить в домене, поскольку это служба инфраструктуры, поэтому ** не ** служба домена. Другие заявили то же самое: «Реализация хранилища также является примером инфраструктурной службы». - http://gorodinski.com/blog/2012/04/14/services-in-domain-driven-design-ddd/ и http://stackoverflow.com/a/2279729/441292 – Martin4ndersen

+0

С точки зрения домена любая сервисный интерфейс, определенный в домене, является службой домена, независимо от ее реализации. – plalx

Смежные вопросы