2

Bei der Implementierung von CQRS mit domänengestütztem Design trennen wir unsere Befehlsschnittstelle von unserer Abfrageoberfläche.Separater Anwendungsdienst für Befehl/Abfrage in CQRS-Implementierung in domänengesteuertem Design?

Mein Verständnis ist, dass auf der Domänenebene dies reduziert Komplexität erheblich (vor allem bei der Verwendung von Event Sourcing) in der Domain-Modell sense Ihr Lese-Modell unterscheidet sich von Ihrem Schreibmodell. Das sieht also wie ein separater Domain-Service für Ihren Lese- und Schreibbeschränkten Kontext aus.

Benötigen wir auf Anwendungsebene einen separaten Anwendungsdienst für die Lese- und Schreibtrennungen unserer Domain?

Ich habe Teufels Anwalt in der Sache gespielt. Meine Gedanken sind, dass es übertrieben sein könnte, dass die Kunden den Unterschied erkennen müssen. Aber dann denke ich darüber nach, wie ein konsumierender Webservice es benutzen könnte. Im Allgemeinen wird es Anfragen zum Lesen und Post zum Schreiben ausgeben, was bedeutet, dass es bereits weiß.

Ich sehe die Vorteile sauberere Anwendungsdienste.

Antwort

4

Der tatsächliche Wert ist ein ordnungsgemäß getrenntes Lese- und Domänenmodell. Sie machen grundlegend andere Dinge. Und haben oft sehr unterschiedliche Formen. Es ist durchaus möglich, dass das Lesemodell beispielsweise ein Amalgam von Daten von unterschiedlichen Domänenobjekten enthält.

Wenn Sie darüber nachdenken, wie sie verwendet werden und wie die Funktion innerhalb einer Anwendung funktioniert, können Sie beginnen, die Notwendigkeit der Trennung zu schätzen. Das klassische Beispiel ist hier die Anzahl der Schreibvorgänge im Vergleich zu den Lesevorgängen in einer typischen Anwendung. Die Lesevorgänge übersteigen die Schreibvorgänge massiv. Indem Sie einen Unterschied beibehalten, können Sie jede Seite für ihre jeweilige Rolle optimieren.

Ein weiterer zu berücksichtigender Aspekt ist, dass ein "Post" einen Befehl darstellt und kein Viewmodel, das ein Lesemodell enthalten kann. Wenn Sie einen CQRS-Ansatz verwenden, müssen Sie die Art und Weise anpassen, wie Sie Abfragen und Posts ausführen. In der Tat können Sie eine viel mehr beschreibende Sprache erreichen, als einfach ein Ansichtsmodell auf einem Server hin und her zu reflektieren.

Wenn Sie interessiert sind, habe ich einen Blogbeitrag, der den Überblick über eine typische CQRS-Architektur auf hohem Niveau skizziert. Sie können es hier finden: A step by step overview of a typical CQRS application. Ich hoffe, Sie finden es nützlich.

Endgültiger Punkt. Wir sind dabei, neue Funktionen hinzuzufügen und haben die Trennung als sehr hilfreich empfunden. Änderungen auf einer Seite wirken sich nicht auf die andere Seite aus.

+0

Das war sehr hilfreich, danke! Ihr Blogpost lieferte einige benötigte Klarheit! – drizzie