У меня есть простой домен examle из двух агрегатных корней и одной регулярной сущности.
Tenant
, UserGroup
и User
, где в данном конкретном примере Tenant
и User
составляют два AggregateRoots.
Когда команда поступает от уровня UI/Service, она достигает обработчика команды, который манипулирует доменом write only.
Можно сказать, что User
вообще не должен быть AggregateRoot, но поскольку на него будут ссылаться другие, он не может быть обычной сущностью. (Да?)
Эти два AggregateRoots должны общаться. Пользователь User
не может быть создан без принадлежности к UserGroup
, которая является сущностью в ограниченном контексте Tenant
. Предположительно, мы можем создать, поскольку это простое ограничение, пользователя через конструктор. User.Create(TenantId, UserGroupId)
Он генерирует DomainEvent
с Date, AggregateVersion и AggregateId (пользователя). Теперь мы переходим к самым размытым частям.
Открытая фиксация этого события в хранилище, это событие транслируется на шину (память, что угодно). Это тот момент, когда обработчики событий домена, подобно обработчикам команд, ловят созданного пользователя и уведомляют/манипулируют Tenant
's UserGroup
для добавления UserId
?
Не идут ли мои мысли о решении этой проблемы в совершенно неверном направлении?