Bei dem Versuch, mich mit CQRS (und DDD im Allgemeinen) zu befassen, bin ich auf Situationen gestoßen, in denen zwei Ereignisse auf verschiedenen Aggregaten auftreten, deren Reihenfolge jedoch Domänenbedeutung hat. Wenn dies der Fall ist, könnten sie so nahe beieinander liegen, dass ein Zeitstempel (wie von den Beispielimplementierungen, die ich gesehen habe) sie nicht unterscheiden kann, was bedeutet, dass der Ereignisspeicher keine vollständige Darstellung der Domäne enthält, da die Reihenfolge mehrdeutig ist in denen Ereignisse aufgetreten sind.In CQRS (ereignisgesteuert) benötigen Sie einen globalen Sequenzzähler im Ereignisspeicher?
Als Beispiel könnte die Domäne ein CustomerCreatedEvent
Feuer, das Customer
Aggregat auf das gilt, und dann ein CustomerAssignedToAgent
Ereignis auf das Agent
Aggregat. Das Ereignis CustomerAssignedToAgent
macht keinen Sinn, wenn es vor der CustomerCreatedEvent
auftritt, aber normalerweise werden beide als Ergebnis einer Operation ausgelöst, die es wahrscheinlich macht, dass die Zeitstempel tatsächlich gleich sind.
Also modelliere ich nur Dinge schlecht? Sollte es jemals eine Situation geben, in der die Abfolge von Ereignissen über verschiedene Aggregate hinweg wichtig ist? Oder sollten Sie eine globale Sequenznummer in Ihrem Ereignisspeicher aufbewahren, damit Sie die genaue Reihenfolge identifizieren können, in der Ereignisse aufgetreten sind?
Dank Szymon, dachte ich, das war der wahrscheinlichste Fall! –
Ich habe die gleichen Male gelesen, aber ... wenn Sie Ihren EventStore als Warteschlange verwenden, um Ereignisse aus anderen beschränkten Kontexten oder sogar für das gleiche BC, in dem sie generiert werden, zu konsumieren, wie können Sie sicher sein, dass Sie sie bekommen in Ordnung? Sie brauchen sie nicht in einer sehr strengen Reihenfolge, aber Sie müssen sie zumindest ab einem bestimmten Offset konsumieren können. – Papipo