Estoy buscando una manera de diseñar una aplicación ddd con convención sobre la configuración.
Digamos que un "Cliente" agregado tiene un comando definido "Perfil de relleno". Lógicamente generará un evento "ProfileFilled".
¿Hay casos en que un comando generará más que un evento, o donde un comando generará diferentes eventos basados en alguna lógica? ¿O es esto siempre una relación 1 - 1 (1 comando siempre no generará ninguno, o un solo evento de un tipo dado).
Pregunto esto porque si esto es un hecho, que un comando siempre generará el mismo evento, puedo construir mi sistema de convenciones sobre ese hecho. Sé que "RaiseEvent" dará como resultado "EventRaised" ...
domain-driven-design
cqrs
event-sourcing
Ludovic C
fuente
fuente
Respuestas:
Dado que etiquetó su pregunta con "CQRS", supongo que se refiere a eventos en un contexto de "CQRS y búsqueda de eventos", como se describe aquí . En este tutorial , la diferencia entre eventos y comandos está bien explicada:
los eventos capturan las "cosas que pueden suceder" elementales en su sistema, desde el punto de vista del sistema.
los comandos se definen por lo que el usuario considera como una operación, desde su punto de vista
Y aunque esto a menudo conduce a un par de comandos y eventos con una correspondencia 1: 1, estos puntos de vista diferentes pueden conducir a comandos que disparan más de un evento, o diferentes eventos dependiendo de los parámetros del comando. Incluso puedo imaginar casos en los que un comando no genera un evento en absoluto, pero ese sería un caso muy excepcional, no muy típico.
Por ejemplo, el tutorial menciona eventos
y comandos
Aquí, el comando "OpenTab" conducirá a un evento "TabOpened", pero el comando PlaceOrder llevará a los eventos "DrinksOrdered", "FoodOrdered", o ambos.
De hecho, si está diseñando un nuevo sistema "desde cero", puede intentar diseñarlo con una correspondencia 1: 1 entre comandos y eventos y ver qué tan bien se escala cuando el sistema se hace más grande. Incluso puede probar un enfoque híbrido: una lista de eventos y comandos con una correspondencia 1: 1, junto con algunos comandos combinados adicionales. Simplemente pruebe qué tan lejos lo lleva al sistema particular que está diseñando.
fuente
Por lo general, un comando conducirá a un evento. Pero en algunos casos también puede ser más de uno, depende de su implementación.
Tu comando llama a otros comandos y cada uno de ellos dispara eventos propios. O su comando realiza diferentes tareas por sí mismo y emite múltiples eventos. Por ejemplo:
RegisterUserCommand
fuente
UserWasAddedToCrm
? Reescribe toda tu secuencia?Un comando puede generar múltiples eventos. Es simplemente la conclusión lógica de un hecho:
Composite command
existe.Digamos que tiene dos comandos, cada uno de los cuales genera un evento. Luego, crea un comando compuesto de esos dos. Desde el punto de vista de uno que usa el comando compuesto, parece que el comando generó dos eventos.
Por lo tanto, no hay nada que le impida tener un solo comando que genere eventos múltiples (o incluso ninguno).
fuente