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