Domain services найкраще описуються тим, чим вони не є:
- вони не є ні
EntitiesніAggregate roots
- вони не
Value objects
- нести доменні знання, які, природно, не відповідають лише одному
Entity або одному Value object
Приклад a Domain service- це Saga/Process manager: він координує тривалий запущений процес із залученням кількох Aggregate roots, можливих із різних Bounded contexts.
Як говориться, що таке Domain serviceі як це реалізується - це дві ортогональні речі.
Чи є UserService в доменному шарі просто посередником та / або фасадом для цих двох сервісів та інфраструктурного шару, чи є в ньому більше?
Деякі доменні сервіси, такі як UserRepository(складається з інтерфейсу, визначеного в Domain layerта конкретної реалізації в Infrastructure layer), можуть бути реалізовані за допомогою Facadeшаблону дизайну. Інші доменні служби не є.
Там немає жорсткого правила про те , як їх реалізувати, крім важливого правила про те , що Domain layerнеобхідно не залежить від інших верств (і SOLID ).