0

私は、多くのアプリケーションで共有されるドメインの一部をカプセル化する一連のアセンブリの開発に取り組んでいます。注文管理システムの例を使用すると、そのようなアセンブリの1つに、アプリケーションが注文に対して/注文とともに実行できるすべてのコア操作が含まれます。「システム」の状態を変更するすべての操作が、CancelOrderCommand、ShipOrderCommand、CreateORderCommandなどのパブリックコマンドとして表されるように、CQS/CQRSの単純なバージョンを適用しています。コマンドハンドラーはアセンブリの内部にあります。

私が答えるのに苦労している質問は、読み取りモデルを消費するコードに最適に公開する方法です。

読み取りモデルは、クエリを実行するためにコードを消費することによって使用されます。読み取りモデルがどのように使用されるかわからないため、クエリを許可するにはインターフェイスを柔軟にする必要があります。

私にとってそれを複雑にしているのは、集約ルートを公開する必要があるだけでなく、クライアントアプリケーションが使用する可能性のある関連データの「ルックアップ」リストもいくつかあることです。たとえば、各注文には、データ駆動型(つまり、列挙型ではない)のOrderTypeが関連付けられており、実行できる/実行できない操作などを制御するビジネスルールの一部を駆動するいくつかのプロパティが含まれています。この関係を管理するモジュール。ただし、注文の作成を許可するクライアントアプリケーションでは、ほとんどの場合、可能なOrderTypeのリストをユーザーに表示する必要があります。その結果、Orderアグリゲートのリストだけでなく、読み取りモデルからのOrderTypes(およびその他のルックアップリスト)のサポートリストを公開する必要があります。

これは通常どのように行われますか?

解決策のきっかけとなる他に何を説明すればよいかわからないので、遠慮なく質問してください...

4

1 に答える 1

0

CQRS ベースの実装がアドホック クエリ用の完全なデータセットを公開するのを見たことがないので、これは興味深い状況です。典型的な CQRS シナリオでは、非常に具体的なクエリを公開します。これは、イベントが呼び出されたときにイベントを発生させたい場合があるためです (たとえば、キャッシュのために - 詳細については、この記事を参照してください)。

ただし、これはあなたの設計であるため、「典型的な」または「正しい」CQRS について心配する必要はありません。ソリューションが必要なだけだと思います。私が見た柔軟なクエリのためにデータを公開するための最も優れた新しいメカニズムの 1 つは、Open Data Protocol (OData)です。これにより、コンシューマーは、公開するデータ ソースに対して独自のフィルター処理、並べ替え、およびページングを実装できます。

これのほとんどの実装は、リレーショナル データを扱うようです。リレーショナル データ ソースを扱っている場合は、OData が適しているかもしれません。「集計ルートを公開する」というコメントから、ドキュメント データベースを使用している可能性があるのではないかと思います。もしそうなら、MongoDB の上にある OData サービスについて私が見た例が 1 つあります。 and-nested-collections.aspx .

お役に立てば幸いです。OData は検討する価値があります。非常に急速に成長しているようで、サーバーとクライアントの両方のテクノロジ プラットフォームで優れたサポートを得ています。

于 2013-03-25T12:00:08.147 に答える