Das CQS-Architekturmuster basiert darauf, dass Sie Ihre Abfragen und Befehle in verschiedene Pfade unterteilen. Im Idealfall kann Ihr Persistenzspeicher partitioniert/gelesen werden, aber in meinem Fall gibt es eine einzige, normalisierte Datenbank.Wie wird CQS (Command Query Separation) implementiert, wenn ein ORM verwendet wird?
Wenn Sie ein ORM (NHibernate in meinem Fall) verwenden, ist es klar, dass das ORM verwendet wird, wenn Befehle ausgegeben werden. Aber was ist mit all den verschiedenen Abfragen, die Sie ausführen müssen, um Daten (DTOs) für Benutzerbildschirme zu erstellen, ist es gängige Praxis, das ORM zu verwerfen, wenn Sie die Query-Seite von CQS ausführen?
Wo soll ich meine Abfragen und DTO-Projektionen implementieren? Straight ADO.NET (Datenreader, Dtos, Datatables, gespeicherte Procs)? Einige Abfragen sind ziemlich einzigartig und beinhalten eine Menge Joins, um alles zusammen zu ziehen. Ich möchte die Datenbank für die Abfragen nicht denormalisieren, aber ich könnte Ansichten erstellen (Dieormalisierung des armen Mannes).
Ja, ich meine CQRS. Ich denke, dass der architektonische Ansatz sehr sinnvoll ist, und ich möchte den ORM für die Gründe verwenden, die Sie geben. Aber wie würden Sie die Probleme behandeln, die ich bei komplexen DTO-Mappings angesprochen habe? Zum Beispiel muss ich hierarchische und Viele-zu-Viele-Beziehungen reduzieren, die von Typen in einem Vererbungsbaum abhängig sind. Ich weiß, dass das vage ist, aber angenommen, dass NHibernate (oder jedes ORM) Mapping in diesen Fällen unangenehm ist. Würden Sie zu diesem Zeitpunkt einem gespeicherten Proc oder einer Ansicht zuordnen oder was? – pfries
Verzeihen Sie mir, wenn Sie sich dessen bereits bewusst sind: NH kann aus Ansichten und Procs mappen. Daher können Sie eine Ansicht oder eine Prozedur in der DB verwenden, aber die Abfrage/Abfrage muss weiterhin NH durchlaufen. –
Ja, das ist, wo ich lehne - Zuordnung zu Ansichten und/oder Procs. Ich denke, man kann sich Ansichten/Procs als das schreibgeschützte db-Modell vorstellen. Das ist, was ich als Denormalisierung des armen Mannes betrachte. In CQRS können Sie diese Ansichten in Tabellen in Leseslaves verschieben, sie werden jedoch vorerst nur als Ansichten implementiert. Vielleicht ist das der beste Weg, darüber nachzudenken. – pfries