Frage

CQRS hat mich kam in Mode zu denken .. Ich bin tryinng ein neues Projekt mit CQRS Ideen zu starten. Die wichtigsten Dinge, die ich mag, ist
1) die Trennung von Abfrage- und Befehl. Unsere Domain-Abfragen haben ein Problem.
2) Mit Ereignisspeicherung für Audit - ich sein werde nicht für Replay mit - zumindest nicht jetzt.

Ich bin gut mit der Abfrageseite und ich habe noch einige Fragen auf Domain Event

Wenn ein Befehl Ergebnisse in updation mehreren Aggregaten Roots (Ex. Auftrag und Orderdetail) ich das haben sie scoped unter UnitofWork (Transaktions-). Jetzt jede Domäne ist verantwortlich für die Ereignisse zu veröffentlichen, wenn ein Wechsel in den Zustand nimmt.

Lassen Sie uns sagen, dass der Befehl ändert 3 Orderdetail Aufzeichnungen. Jedes Orderdetail wird 2 Veranstaltungen veröffentlichen. Am Ende haben wir 6 Veranstaltungen.

a) Wenn ich die Ereignisse veröffentlichen, sobald ich die Änderungen an der Domain-Objekt vorgenommen haben (aber nicht die Transaktion festgeschrieben), wie kann ich die Ereignisse umkehren, die veröffentlicht wurden (und) von Teilnehmern verbraucht worden sein

  • Was kann ich mir vorstellen, um die Ereignisse zu halten, in einer Liste veröffentlicht werden ‚unter der gleichen Einheit von Arbeitsumfang‘ und sobald die committ auf Transaktion aufgerufen wurde, speichern sie und veröffentlichen. Klingt das etwas, das man tun würde.

b) Wenn die Änderungen in Orderdetail erfordern, dass eine Veränderung stattfindet auch in Auftrag Aggregate Wurzel dann
    i) Soll ich stützen diese Änderungen durch die Ereignisse von Orderdetail Aggregate veröffentlicht Handling? Für ex. lassen Sie uns sagen, zwei Order Detail entfernt wurden. Dies macht Auftragsstatus von „bevorzugten“ auf „nicht bevorzugt“.     ii) Was passiert, wenn das Ereignis Fehler und nicht aktualisiert, um Zustand -. Wenn Auftrag bleibt bevorzugt dann wird es innerhalb von 2 Tagen

Hinzufügen eines weiteren Frage
c) Ist „Domain Ereignisse sind die Quelle aller Anwendungszustandsänderungen“ oder sind sie „Ergebnis aller Anwendungszustandsänderungen“

Vielen Dank im Voraus,

Das Mar

War es hilfreich?

Lösung

a) Sie sollten keine Ereignisse veröffentlichen, bis die Transaktion verpflichtet ist, ein Ereignis reprsent etwas, das geschehen , und daher auch der Grund, warum sie alle in Pass benannt sind angespannt (zB OrderClearedEvent). Auch in dem Fall, dass Sie auf „revert“ ein Ereignis haben, sollten Sie eine Korrekturmaßnahmen ergreifen, also müssen Sie nicht das Ereignis löschen, müssen Sie ein neues Ereignis auslösen, dass korrigiert die Auswirkungen des Ereignisses Sie wollen zurück wechseln

b) es scheint, dass dies eher ein Problem ist, wie Sie Sie modellieren Einheiten und Befehle, die alles andere. Ich kann nicht aus einem Grund denken, warum ein Orderdetail AggregateRoot wäre, aber ich nicht Ihre Domain wissen ...

c) Befehle in mindestens einem Ereignis führen werden veröffentlicht

Hope, das hilft :) Wie Rinat sagte die Google-Gruppe ist der beste Ort, um Fragen zu stellen, hat auch einen Blick auf cqrsinfo.com und den Beispielcode aus github.com/MarkNijhof/Fohjin und github.com/gregoryyoung/ mr

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top