Tengo un dominio de examen simple de dos raíces agregadas y una entidad regular. Tenant
, UserGroup
y User
donde en este ejemplo particular, el Tenant
y User
compensar los dos AggregateRoots.¿Cuándo entran en juego los controladores de eventos de dominio?
Cuando se recibe un comando de la capa de UI/Servicio, llega al controlador de comandos que manipula el dominio de solo escritura.
Se podría decir que User
no se supone que es un AggregateRoot en absoluto, pero ya que será referenciado por otros, no puede haber una entidad regular. (¿sí?)
Estos dos agregados necesitan comunicarse. No se puede crear un User
sin pertenecer a un UserGroup
, que es una entidad en el contexto delimitado de Tenant
. Presumiblemente, podemos crear, dado que es una restricción simple, un Usuario a través del constructor. User.Create(TenantId, UserGroupId)
Genera un DomainEvent
con Fecha, AgregadoVersión y AgregadoId (del usuario). Ahora llegamos a las partes borrosas.
Abra la entrada de este evento en la tienda, este evento se retransmite en el bus (memoria, lo que sea). Es este el punto donde los manejadores de eventos del dominio, similares a los manejadores de comandos, atrapan al usuario creado y notifican/manipulan Tenant
's UserGroup
para agregar el UserId
?
¿Mi idea de resolver esto va en la dirección totalmente equivocada?
Puede que simplifique su problema reconsiderando su modelo. Los eventos de dominio son útiles cuando se requiere una comunicación de contexto cruzada o cuando se desea invocar la lógica de negocios, como la correspondencia por correo electrónico, en respuesta a eventos de dominio. ¿Su modelo requiere contextos acotados múltiples? ¿Puede contener todas las operaciones requeridas en la capa de servicio, como un servicio de usuario? – eulerfx
Uno siempre debe verificar si no puede modelar el problema. En este caso, sin embargo, es un ejemplo artificial para obtener respuestas sobre cómo se supone que debe ocurrir la comunicación entre diferentes AR delimitadas. – Jaapjan
"¿Qué comportamiento futuro en UserGroup requiere UserId?" es una pregunta muy importante que debe hacerse (de lo contrario, ¿por qué se comunicaría entre agregados?).Hacer que el inquilino forme parte de su dominio parece ... extraño si su dominio no se trata de tenencia múltiple (no debe confundirse con el arrendamiento múltiple como requisito no funcional). Usa tus objetos de dominio para colaborar combinados con algunos TDA si están en el mismo BC. –