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 ).