私は、多くのアプリケーションで共有されるドメインの一部をカプセル化する一連のアセンブリの開発に取り組んでいます。注文管理システムの例を使用すると、そのようなアセンブリの1つに、アプリケーションが注文に対して/注文とともに実行できるすべてのコア操作が含まれます。「システム」の状態を変更するすべての操作が、CancelOrderCommand、ShipOrderCommand、CreateORderCommandなどのパブリックコマンドとして表されるように、CQS/CQRSの単純なバージョンを適用しています。コマンドハンドラーはアセンブリの内部にあります。
私が答えるのに苦労している質問は、読み取りモデルを消費するコードに最適に公開する方法です。
読み取りモデルは、クエリを実行するためにコードを消費することによって使用されます。読み取りモデルがどのように使用されるかわからないため、クエリを許可するにはインターフェイスを柔軟にする必要があります。
私にとってそれを複雑にしているのは、集約ルートを公開する必要があるだけでなく、クライアントアプリケーションが使用する可能性のある関連データの「ルックアップ」リストもいくつかあることです。たとえば、各注文には、データ駆動型(つまり、列挙型ではない)のOrderTypeが関連付けられており、実行できる/実行できない操作などを制御するビジネスルールの一部を駆動するいくつかのプロパティが含まれています。この関係を管理するモジュール。ただし、注文の作成を許可するクライアントアプリケーションでは、ほとんどの場合、可能なOrderTypeのリストをユーザーに表示する必要があります。その結果、Orderアグリゲートのリストだけでなく、読み取りモデルからのOrderTypes(およびその他のルックアップリスト)のサポートリストを公開する必要があります。
これは通常どのように行われますか?
解決策のきっかけとなる他に何を説明すればよいかわからないので、遠慮なく質問してください...