Frage
Ich bin neu in CQRS und verwirrte, wie Befehl, um eine Adressänderung zu einem Kundenobjekt schreibt
Lassen Sie uns sagen ich Kundeninformationen in zwei Tabellen geteilt haben
Kunde - Domain-Datenbank
Aktiv Bevorzugte
Customer_Read Datenbank
Name,
Adresse,
Telefon,
Benutzer ändern Adresse des Kunden. Die Adressfelder sind alle in Lese Datenbank. es können drei oder mehr Abfrage freundliche Tabellen sein, die Adressinformationen zu halten.
Wenn ich die CQRS Implementierungen verstehen (Probe) Kunden-Domain (entfernt Aggregate root) veröffentlichen Veranstaltung über Adressänderung, die durch mehrere Handler gehandhabt werden sollte jede der Tabelle zu aktualisieren.
Wie kann ich das implementieren, wenn ich den Zustand des Kundenobjekts ändert werden wont? Haben Domain haben zu wissen, dass es Adresse in einer anderen Datenbank hat?
Vielen Dank im Voraus.
Grüße,
Das Mar
Update -
Nach dem durch weitere Beiträge über Netz gehe Ich gehe davon aus, dass, wenn der Staat nicht durch den Befehl kein Ereignis geändert wird, wird erzeugt, um die Domain selbst zu retten, sondern Ereignisse angewandt werden die Adresse in Abfrage / Ansicht Modell zu ändern freundliche Tabellen.
Lösung
Sie müssen noch einige Domain-Daten irgendwo in der Schreib Persistenz bestehen bleiben. Auf diese Weise wird die Adresse in diesem persistenten Speicher gespeichert wird, wird nach der Veranstaltung veröffentlicht es zu ändern.
Auf diese Weise:
- , wenn es keine Veränderung gab - wir veröffentlichen die Veranstaltung überspringen
- Domain braucht nichts über Objekte zu wissen, dass kann (oder auch nicht), um seine Ereignisse abonniert werden.
Diese Logik gilt sowohl für die Persistenz in relationalen DBs (MS SQL mit NHibernate, zum Beispiel) und Event-Sourcing-Ansatz.