Al tratar de entender CQRS (y DDD en general) me he encontrado con situaciones cuando dos eventos ocurren en agregados diferentes, pero el orden de ellos tiene un significado de dominio. Si es así, podrían pasar tan juntos que una marca de tiempo (como la utilizada en las implementaciones de muestra que he visto) no puede diferenciarlos, lo que significa que el almacén de eventos no contiene una representación 'completa' del dominio ya que hay ambigüedad sobre el orden en que eventos ocurrieron.En CQRS (fuente del evento), ¿necesita un contador de secuencia global en la tienda de eventos?
A modo de ejemplo, el dominio podría disparar un CustomerCreatedEvent
que se aplica al agregado Customer
, y después de un evento CustomerAssignedToAgent
sobre el agregado Agent
. El evento CustomerAssignedToAgent
no tiene sentido si ocurre antes del CustomerCreatedEvent
, pero normalmente ambos pueden dispararse como resultado de una operación que hace que sea probable que las marcas de tiempo sean efectivamente las mismas.
Entonces, ¿estoy modelando cosas mal? ¿Debería haber alguna vez una situación en la que la secuencia de eventos en diferentes agregados sea importante? ¿O debería mantener un número de secuencia global en su tienda de eventos, para que pueda identificar la secuencia exacta en la que ocurrieron los eventos?
Gracias Szymon, ¡pensé que ese era el caso más probable! –
He leído la misma cantidad de veces, pero ... cuando usa EventStore como cola para consumir eventos de otros contextos delimitados, o incluso para el mismo BC en el que se generan, ¿cómo puede estar seguro de que los obtiene? ¿en orden? no los necesita en un orden muy estricto, pero al menos necesita poder consumirlos a partir de una compensación determinada. – Papipo