Ich lerne DDD und Hexagonal Architektur, ich denke, ich habe die Grundlagen. Aber ich bin mir nicht sicher, wie ich das lösen soll: Wie zeige ich dem Benutzer Daten an?Zeige Daten auf der Benutzeroberfläche in der Hexagonal-Architektur
So, zum Beispiel, ich habe eine einfache Domäne mit einer Worker-Entität mit einigen Funktionen (einige Methoden verursachen die Entität zu ändern) und ein WorkerRepository, so dass ich Arbeiter beibehalten kann. Ich habe eine Anwendungsebene mit einigen Befehlen und Befehlsbus, um die Domäne zu manipulieren (wie Workers zu erstellen und ihre Arbeitsstunden zu aktualisieren, die Änderungen persistent zu halten) und eine Infrastrukturschicht, die die Implementierung des WorkerRepository und einer GUI-Anwendung hat.
In dieser Anwendung möchte ich alle Arbeiter mit einigen ihrer Daten zeigen, und sie zu ändern. Wie zeige ich die Daten an?
- Ich könnte es einen Verweis auf die Implementierung von WorkerRepository geben. Ich denke, es ist keine gute Lösung, weil ich auf diese Weise neue Workers in das Repository einfügen und den Befehlsbus überspringen kann. Ich möchte, dass alle Änderungen über den Befehlsbus laufen.
- Okay, dann würde ich das WorkerRepository in WorkerQueryRepository und WorkerCommandRepository (nach CQRS) aufteilen, und verweisen nur auf das WorkerQueryRepository. Es ist immer noch keine gute Lösung, weil das Repo Arbeitsteilen zurückgibt, die über Methoden verfügen, die sie ändern, und wie werden diese Änderungen beibehalten?
- Sollte ich zwei Arten von Repositories erstellen? Einer würde in der Domänen- und Anwendungsschicht verwendet werden und der andere würde nur zum Bereitstellen von Daten für die Außenwelt verwendet werden. Die zweite würde keine vollwertigen Worker-Entitäten zurückgeben, sondern nur WorkerDTOs, die nur die Daten enthalten, die die GUI benötigt. Auf diese Weise hat die GUI keine andere Möglichkeit, Workers zu ändern, nur über den Befehlsbus.
Ist der dritte Ansatz der richtige Weg? Oder irre ich mich, dass die Änderungen durch den Befehlsbus gehen müssen?
Ich merke jetzt, dass ich CQRS leicht falsch interpretiert habe, aber deine Antwort hat das geklärt. Und danke, dass du mich mit Projektionen in die richtige Richtung schubst und Modellfabriken liest! – bhaclash
"Sie lesen den aktuellen Status aus dem Buch der Aufzeichnung (über das Repository)" ... Das ist nicht, was CQRS überhaupt ist. CQRS bedeutet unabhängiges Lesen und Schreiben von Modellen. Wenn Sie das Domänenmodell nicht vollständig für Abfragen umgehen, sind die 2 gebunden und können sich nicht vollständig unabhängig voneinander entwickeln. Ich sage nicht, dass das Konstruieren von DTOs aus dem Domänenmodell notwendigerweise schlecht ist, aber dann können Sie nicht sagen, dass Sie eine CQRS-Architektur verwenden. – plalx