Próbując zrozumieć moją CQRS (i ogólnie DDD), natknąłem się na sytuacje, kiedy dwa zdarzenia występują w różnych agregatach, ale ich kolejność ma znaczenie domenowe. Jeśli tak, to mogą się zdarzyć tak blisko siebie, że znacznik czasu (używany przez przykładowe implementacje, które widziałem) nie może ich rozróżnić, co oznacza, że magazyn zdarzeń nie zawiera "pełnej" reprezentacji domeny, ponieważ istnieje niejasność w stosunku do kolejności w którym zdarzały się wydarzenia.Czy w CQRS (z uwzględnieniem zdarzeń) potrzebny jest globalny licznik sekwencji w magazynie zdarzeń?
Jako przykład, domena mogła wystrzelić CustomerCreatedEvent
która dotyczy agregatu Customer
, a następnie CustomerAssignedToAgent
zdarzenie na kruszywa Agent
. Zdarzenie CustomerAssignedToAgent
nie ma sensu, jeśli występuje przed CustomerCreatedEvent
, ale zazwyczaj oba z nich mogą zostać uruchomione w wyniku jednej operacji, która sprawia, że znaczniki czasu będą faktycznie takie same.
Po prostu źle modeluję rzeczy? Czy kiedykolwiek dojdzie do sytuacji, w której kolejność zdarzeń w różnych agregatach jest ważna? A może powinieneś zachować globalny numer sekwencji w swoim magazynie zdarzeń, abyś mógł dokładnie określić kolejność zdarzeń?
Dzięki Szymon, pomyślałem, że to najbardziej prawdopodobny przypadek! –
Czytałem te same partie razy, ale ... kiedy używasz swojego EventStore jako kolejki do używania zdarzeń z innych ograniczonych kontekstów lub nawet dla tego samego BC, w którym są generowane, jak możesz być pewien, że je otrzymasz w celu? nie potrzebujesz ich w bardzo ścisłej kolejności, ale przynajmniej musisz mieć możliwość skonsumowania ich z danego offsetu. – Papipo