Nel tentativo di orientarmi su CQRS (e DDD in generale) mi sono imbattuto in situazioni in cui due eventi si verificano su aggregati diversi ma l'ordine di questi ha un significato di dominio. In tal caso, potrebbero accadere in modo così ravvicinato che un timestamp (utilizzato dalle implementazioni di esempio che ho visto) non può differenziarli, il che significa che l'archivio eventi non contiene una rappresentazione "completa" del dominio in quanto vi è ambiguità sull'ordine in cui si sono verificati eventi.In CQRS (origine evento), è necessario un contatore di sequenza globale nell'archivio eventi?
A titolo di esempio, il dominio potrebbe sparare un CustomerCreatedEvent
che si applica al Customer
aggregata, e quindi un evento CustomerAssignedToAgent
sul Agent
aggregato. L'evento CustomerAssignedToAgent
non ha senso se si verifica prima dello CustomerCreatedEvent
, ma in genere entrambi possono essere attivati come risultato di un'operazione che rende probabile che i timestamp siano effettivamente gli stessi.
Quindi sto solo modellando le cose male? Dovrebbe mai esserci una situazione in cui la sequenza di eventi tra diversi aggregati è importante? O dovresti tenere un numero di sequenza globale nel tuo negozio di eventi, in modo da poter identificare la sequenza esatta in cui si sono verificati gli eventi?
Grazie Szymon, ho pensato che fosse il caso più probabile! –
Ho letto lo stesso numero di volte, ma ... quando usi il tuo EventStore come coda per consumare eventi da altri contesti limitati, o anche per lo stesso BC in cui sono generati, come puoi essere sicuro di averli In ordine? non ne hai bisogno in un ordine molto rigoroso, ma almeno devi essere in grado di consumarli da un dato offset. – Papipo