CQRS-Ereignisse enthalten keine Details, die zum Aktualisieren des Lesemodells erforderlich sind
Eines an CQRS bekomme ich nicht: So aktualisieren Sie das Lesemodell, wenn das ausgelöste Ereignis nicht die zum Aktualisieren des Lesemodells erforderlichen Details enthält.
Leider ist dies ein recht häufiges Szenario.
Beispiel: Ich füge einen Benutzer zu einer Gruppe hinzu und sende einen Befehl addUserToGroup (userId, groupId). Dies wird vom Befehlshandler empfangen, verarbeitet und das userAddedToGroup-Ereignis wird erstellt, gespeichert und veröffentlicht.
Ein Ereignishandler empfängt nun dieses Ereignis und die beiden IDs. Jetzt gibt es eine Ansicht, die alle Benutzer mit den Namen der Gruppen auflistet, in denen sie sich befinden. Um das Lesemodell für diese Ansicht zu aktualisieren, benötigen wir die Benutzer-ID (die wir haben) und den Gruppennamen (die wir nicht haben). t haben, wir haben nur seine id).
Die Frage ist also: Wie gehe ich mit diesem Szenario um?
Derzeit fallen mir vier Optionen ein, die alle ihre spezifischen Nachteile haben:
Das Lesemodell fragt die Domäne. => Verboten und auch nicht möglich, da die Domain nur Verhalten hat, kein (öffentlicher) Zustand.
Das Lesemodell liest den Gruppennamen aus einer anderen Tabelle im Lesemodell. => Funktioniert, aber wenn es keine passende Tabelle gibt?
Fügen Sie dem Ereignis die erforderlichen Daten hinzu. => Funktioniert nicht, da ich auch alle vorherigen Ereignisse aktualisieren musste und nicht vorhersehen kann, welche Daten ich eines Tages benötigen werde.
Behandeln Sie das Ereignis nicht über einen "normalen" Ereignishandler, sondern starten Sie im Hintergrund einen ETL-Prozess, der sich mit dem Ereignisspeicher befasst, die erforderlichen Daten erstellt und das Lesemodell schreibt. => Funktioniert, aber für ein so einfaches Szenario scheint mir das ein bisschen zu viel Aufwand zu sein.
Die Frage ist also: Wie gehe ich mit diesem Szenario richtig um?