Zdarzenia CQRS nie zawierają szczegółów potrzebnych do aktualizacji modelu odczytu
Jest jedna rzecz w CQRS, której nie dostaję: Jak zaktualizować odczytany model, gdy podniesione zdarzenie nie zawiera szczegółów potrzebnych do aktualizacji modelu odczytu.
Niestety, jest to dość powszechny scenariusz.
Przykład: dodaję użytkownika do grupy, więc wysyłam polecenie addUserToGroup (userId, groupId). Jest to odbierane, obsługiwane przez program obsługi komend, zdarzenie userAddedToGroup jest tworzone, przechowywane i publikowane.
Teraz obsługa zdarzeń odbiera to zdarzenie i oba identyfikatory. Teraz pojawi się widok, który wyświetli listę wszystkich użytkowników z nazwami grup, w których się znajdują. Aby zaktualizować model odczytu dla tego widoku, potrzebujemy identyfikatora użytkownika (który mamy) i nazwy grupy (której nie mamy) Mamy, mamy tylko jego identyfikator).
Więc pytanie brzmi: jak radzić sobie z tym scenariuszem?
Obecnie przychodzą mi do głowy cztery opcje, wszystkie z ich specyficznymi wadami:
Model odczytu pyta domenę. => Zabronione, a nawet niemożliwe, ponieważ domena ma tylko zachowanie, nie ma stanu (publicznego).
Model odczytu odczytuje nazwę grupy z innej tabeli w modelu odczytu. => Działa, ale co jeśli nie ma pasującej tabeli?
Dodaj niezbędne dane do wydarzenia. => Nie działa, ponieważ oznacza to, że musiałem zaktualizować wszystkie poprzednie wydarzenia, i nie mogę przewidzieć, które dane będę potrzebować pewnego dnia.
Nie obsługuj zdarzenia za pomocą „zwykłej” procedury obsługi zdarzeń, ale uruchom proces ETL w tle, który zajmuje się składnicą zdarzeń, tworzy niezbędne dane i zapisuje odczytany model. => Działa, ale dla mnie wydaje się to trochę zbyt dużym obciążeniem dla tak prostego scenariusza.
Tak więc pytanie brzmi: jak prawidłowo radzić sobie z tym scenariuszem?