Ich habe vor kurzem angefangen, CQRS und DDD für ein grünes Feldprojekt zu untersuchen, das ich gerade beginne. Ich habe sehr viel Material von Udi Dahan, Greg Young, Mark Nijhof und anderen studiert. Diese waren wirklich sehr hilfreich und ich denke, dass ich die Konzepte gut verstehe. Aber es gibt immer noch einige Fragen, wie ich diese auf meine eigene Domain anwenden kann.CQRS - wie man ein Szenario-Ausführungssystem modelliert
Mein System wird im Grunde eine komplexe Regel-Engine sein - in der Regeln den Endpreis bestimmter Produkte diktieren werden. Die Produktdefinitionen und -regeln werden von Administratoren in das System eingegeben. Regeln werden von Administratoren entworfen, die einen vordefinierten Satz von Eigenschaften verwenden, die Werte aus einem vordefinierten Satz haben können, z. B. "Kaufzweck" (Weiterverkauf, Vermietung) oder Freiform-Werte wie Alter.
Jedes Produkt wird einen Grundpreis haben, und Regeln werden grundsätzlich vom Basispreis hinzufügen/entfernen, wenn sie gelten.
könnte eine sehr einfache Beispielregel sein:
Für Produkt X, IF (Purchase Purpose = Resell und Alter> 25) Fügen Sie $ 25 auf Basispreis.
So gibt es 2 Arten von Benutzern, die das System verwenden, Administratoren, die die Produkte, Regeln und Basispreise definieren; und andere Benutzer, die Preise basierend auf einem Szenario abfragen, das sie über eine Was-wäre-wenn-UI eingeben.
Meine Verwirrung hier ist dies: ein Szenario läuft ändert den Zustand der Domäne überhaupt nicht, kein anderes externes System/Person ist am Ergebnis der Szenarioausführung interessiert, sondern der laufende Benutzer selbst - es gibt die Ergebnis einer Preisberechnung nach dem Ausführen der anwendbaren Regeln für das gegebene Szenario. Beispielsweise könnte der Benutzer Produkt X auswählen und die Preisfindung für ein bestimmtes Szenario abfragen, z. B. (Kaufzweck = Weiterverkauf und Alter = 40). Da diese Operation den Domänenstatus überhaupt nicht ändert, denke ich, dass es sich um eine Abfrage handelt. Aber es gibt eine Regel-Engine, die mit dem Szenario arbeitet, um den Endpreis zu berechnen, was ich als Domain-Logik bezeichnen kann, die ausgeführt wird. Also - wo gehört diese Logik? Ist dies eine Abfrage, die nur vom Lesemodell ausgeführt wird, oder führt ein Szenario einen Befehl aus, der im Domänenmodell ausgeführt werden muss? Auch hier fühlt es sich an, als ob der Domänen-Layer der richtige Platz für diese Regeln wäre. Aber wie gebe ich das Ergebnis der Szenario-Ausführung an den Benutzer weiter (fühlt sich an wie eine Abfrage, die so darüber nachdenkt). Oder vielleicht ist CQRS nicht die richtige Lösung für dieses spezielle Problem?
+1 für die Angabe, dass es ein [cqrs] (http://blog.fossmo.net/post/Command-and-Query-Responsibility-Segregation-%28CQRS%29.aspx) Muster gibt, von dem ich nie gehört habe Vor. – k3b