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