Какой API должен предоставлять доменный сервис? - PullRequest
0 голосов
/ 22 апреля 2019

Вдохновляя себя Вогом Верноном https://github.com/VaughnVernon/IDDD_Samples, Я смущен, когда решаю, какой API должен иметь доменный сервис:

  • Служба домена DomainService1 использует домен DomainService2 для выполнения части бизнес-логики. Затем он фильтрует результат Repository1 в соответствии с результатом вызова DomainService2.myMethod

  • DomainService2 нужны данные, которые не живут в MyCurrentBoundedContext, а живут в ForeignBoundedContext

Наш обычный подход заключается в реализации сценария использования автономного Service2 следующим образом:

  1. мы бы включили в DomainService2.myMethod подпись объекты домена, необходимые для оправдания логики
  2. мы бы написали ApplicationService2, который предоставил бы точку входа для DomainService2 и использовал бы другой сервис, DomainService3, отвечающий за получение данных от ForeignBoundedContext
  3. Обычно мы реализуем DomainService3 как AntiCorruption Layer, как это делает Во Вернон в своей TranslatingCollaboratorService

Теперь наша проблема заключается в применении этого шаблона для разработки DomainService1, поскольку он содержит значительную предметную логику:

  1. мы могли бы обернуть DomainService1 в сам ApplicationService1, из которого мы сначала вызовем ApplicationService2, а затем мы передадим его результат всему результату до DomainService1. Недостатком этого подхода является то, что API DomainService1 следует вызывать для включения аргументов, которые необходимы только потому, что DomainService1 обычно использует DomainService2 для выполнения части работы

  2. Мы могли бы удалить ApplicationService2, изменить подпись DomainService2 (таким образом изменив первую точку нашего обычного подхода) и включить только идентификаторы. Затем мы создадим реализацию DomainService2, которая будет находиться в пакете инфраструктуры и будет использовать DomainService3, отражая поведение "старого" ApplicationService2. Это кажется более естественным, чем изменение подписи DomainService1, но нам не нравится идея размещать в реализации службы домена ту же логику, которую мы используем в службе приложений.

Где живет граница между ApplicationService и реализацией доменной службы?

...