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