Frage

Dieses Video von Greg Yound auf DDD Gesehen Nachdem

http://www.infoq.com/interviews/greg-young-ddd

Ich frage mich, wie Sie die Anwendung Command-Query-Separation (CQS) mit DDD implementieren können, wenn Sie im Speicher Änderungen haben?

Mit CQS haben Sie zwei Repositories, eine für Befehle, eine für Abfragen. Neben zwei Objektgruppen, Befehlsobjekte und Query-Objekte. Befehlsobjekte haben nur Methoden, und es werden keine Eigenschaften, die die Form der Objekte aussetzen könnte, und dürfen nicht verwendet werden, um Daten auf dem Bildschirm angezeigt werden soll. Query-Objekte auf der anderen Seite verwendet werden, Daten auf dem Bildschirm angezeigt werden soll.

In dem Video immer die Befehle an die Datenbank gehen, und so können Sie die Abfrage-Repository verwenden, um die aktualisierten Daten zu holen und wieder angezeigt auf dem Bildschirm.

Könnten Sie CQS mit so etwas wie und Bearbeitungsbildschirm in ASP.NET verwenden, wo Änderungen im Speicher gemacht werden, und der Bildschirm muss mehrmals mit den Änderungen aktualisiert werden, bevor die Änderungen in die Datenbank beibehalten werden?

Zum Beispiel

  1. I ein Abfrageobjekt aus der Abfrage-Repository holen und sie auf dem Bildschirm angezeigt werden
  2. I auf Bearbeiten
  3. I wieder beschaffen ein Abfrageobjekt aus der Abfrage-Objekt-Repository und es wird auf dem Formular im Bearbeitungsmodus
  4. wechsle ich Wert auf die Form, die den Befehl Objekt zurück und holt autoposts und gibt den entsprechenden Befehl
  5. WAS zu TUN: Ich muss jetzt das aktualisierte Objekt anzuzeigen, wie der Befehl Änderungen an den berechneten Feldern. Da der Befehl Objekt nicht in der Datenbank gespeichert hat, kann ich nicht die Abfrage-Repository verwenden. Und mit CQS bin ich nicht dazu gedacht, um die Form des Befehlsobjekts zu belichten auf dem Bildschirm angezeigt werden soll. Wie würden Sie ein Abfrageobjekt zurück mit den aktualisierten Änderungen erhalten auf dem Bildschirm angezeigt werden soll.

Ein paar möglicher Lösungen, die ich denken kann, ist eine Session-Repository zu haben oder eine Möglichkeit, ein Abfrage-Objekt aus dem Befehlsobjekt zu bekommen. Oder ist CQS nicht auf diese Art von Szenario anwenden?

Es scheint mir, dass in der Datenbank erhalten in den Video Änderungen beibehalten sofort, und ich habe nicht ein Beispiel von DDD mit CQS gefunden, die das Problem der Dosierung Änderungen an einem Domain-Objekt-Adressen und die Aktualisierung der Ansicht des modifizierten Domain-Objekt, bevor sie schließlich einen Befehl ausgibt, das Domain-Objekt zu speichern.

War es hilfreich?

Lösung

Wenn Sie wirklich für diese CQS verwenden mögen, würde ich sagen, dass sowohl die Abfrage Repo- und die Write-Repo sowohl einen Verweis auf den gleichen Hintergrundspeicher haben. Normalerweise wird diese Referenz ist über eine externe Datenbank -. Aber in Ihrem Fall könnte es eine List oder ähnlich sein

Andere Tipps

Also, was es klingt wie Sie hier wollen, ist ein körniger Befehl.

Beispiel: der Benutzer interagiert mit der Web-Seite (sagen wir mal einen Check-out mit einem Einkaufswagen zu tun)

.

Die mehreren Seiten Informationen bekommen bauen einen Befehl auf. Der Befehl erhält nicht, bis der Benutzer wirklich gesendet auscheckt, wo die alle Informationen in einem einzigen Befehl an die Domäne nennen wir es eine „Kasse“ Befehl gesendet werden.

Präsentationsmodelle sind sehr hilfreich bei dieser Art von Interaktion zu abstrahieren.

Hope, das hilft.

Greg

Auch für den Rest Ihrer Anliegen ...

Diese sind so Bedenken mit Eventual Consistency zu CQRS gegenüber. Sie müssen nicht mit CQRS schließlich in Einklang stehen Sie die Verarbeitung des Befehls machen können ebenfalls der Meldespeicher schreiben (oder den gleichen physikalischen Speicher für beide wie erwähnt verwenden) in einer konsistenten Art und Weise. Ich Menschen tatsächlich empfehlen dies als ihre Basisarchitektur zu tun, und später zu kommen Throught und Eventual Consistency einführen, wo nötig, da es Kosten, die mit ihm azssociated.

Im Speicher, würden Sie in der Regel verwenden die Observer-Entwurfsmuster .

Eigentlich will man immer dieses Muster verwenden, aber die meisten Datenbanken bieten keine effiziente Möglichkeit, eine Methode in Ihrer Anwendung, wenn etwas in den DB-Änderungen zu nennen.

Die Unit of Work Designmuster von Patterns of Enterprise Application Architecture CQS paßt sehr gut - es ist im Grunde ein großer Befehl, die Sachen in der Datenbank bestehen <. / p>

JdonFramework ist CQRS DDD Java-Framework, ein Domain-Ereignisse + Asynchronous Muster liefern, weitere Informationen https: // jdon.dev.java.net/

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