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