メモリ内の変更を使用して CQS を実装するにはどうすればよいですか?
-
16-09-2019 - |
質問
DDD で Greg Yound によるこのビデオを視聴しました
http://www.infoq.com/interviews/greg-young-ddd
メモリ内に変更がある場合、DDD を使用してコマンドとクエリの分離 (CQS) をどのように実装できるのか疑問に思いました。
CQS では、コマンド用とクエリ用の 2 つのリポジトリがあります。コマンド オブジェクトとクエリ オブジェクトという 2 つのオブジェクト グループに加えて。コマンド オブジェクトにはメソッドのみがあり、オブジェクトの形状を公開するプロパティはなく、画面上にデータを表示するためには使用されません。一方、クエリ オブジェクトは、データを画面に表示するために使用されます。
ビデオでは、コマンドは常にデータベースに送信されるため、クエリ リポジトリを使用して更新されたデータを取得し、画面に再表示できます。
ASP.NET の編集画面のようなもので CQS を使用できますか。変更はメモリ内で行われ、変更がデータベースに保存される前に変更内容で画面を数回更新する必要があります。
例えば
- クエリリポジトリからクエリオブジェクトを取得して画面に表示します
- 「編集」をクリックします
- クエリ オブジェクト リポジトリからクエリ オブジェクトを再フェッチし、編集モードでフォームに表示します
- フォーム上の値を変更すると、自動ポストバックしてコマンドオブジェクトが取得され、関連するコマンドが発行されます。
- 何をするか:コマンドが計算フィールドに変更を加えたので、更新されたオブジェクトを表示する必要があります。コマンド オブジェクトがデータベースに保存されていないため、クエリ リポジトリを使用できません。また、CQS では、コマンド オブジェクトの形状を公開して画面に表示することを意図していません。更新された変更を含むクエリ オブジェクトを取得して画面に表示するにはどうすればよいでしょうか。
私が考えられる解決策としては、セッション リポジトリを使用するか、コマンド オブジェクトからクエリ オブジェクトを取得する方法が考えられます。それとも、CQS はこの種のシナリオには適用されないのでしょうか?
ビデオでは、変更はデータベースにすぐに永続化されるように思えますが、ドメインオブジェクトへの変更をバッチ処理し、変更されたドメインオブジェクトのビューを更新する問題に対処するCQSを使用したDDDの例はこれまでに見つかりませんでした。最後に、ドメイン オブジェクトを保存するコマンドを発行します。
解決
、私は、クエリのレポと書き込みレポの両方が同じバッキングストアへの参照を持っていると言うでしょう。通常、このリファレンスは、外部データベースを経由している - しかし、あなたのケースでは、リスト
他のヒント
それでは、あなたはここにしたいように聞こえることは、より詳細なコマンドです。
EG:ユーザーがWebページと相互作用(のは、ショッピングカートにチェックをやって言わせて)
。の情報を取得し、複数のページでは、コマンドを構築しています。コマンドは、ユーザーの実際全角>のは、「チェックアウト」コマンドを呼び出してみましょうすべての情報は、ドメインへの単一のコマンドにまで送信されている場所を確認します。
まで送信されません。プレゼンテーションモデルは、この種の相互作用を抽象化するのは非常に便利です。
この情報がお役に立てば幸いです。
グレッグ
また、あなたの懸念の残りのための...
これらは、より多くのようにCQRSとは対照的に、最終的な一貫性と懸念しています。あなたは一貫した方法で、コマンドの処理はまた、レポートストアへの書き込み(または述べたように、両方のために同じ物理ストアを使用する)ことができますCQRSと最終的に一貫している必要はありません。私は実際に彼らの基本アーキテクチャとしてこれを行うには、人々をお勧めしますし、後でそれをazssociatedコストがあるので、必要な場所throught来て、最終的な一貫性を紹介します。
メモリでは、あなたは通常、オブザーバーデザインパターンを使用することになります。
実際には、あなたはいつもこのパターンを使用したいが、ほとんどのデータベースは、あなたのアプリでメソッドを呼び出すための効率的な方法を提供していないとき、DBの変更で何かます。
の 作業単位 からのデザインパターン エンタープライズ アプリケーション アーキテクチャのパターン CQS と非常によく一致します。これは基本的にデータベースに内容を保持する大きなコマンドです。
JdonFrameworkがCQRS DDDのJavaフレームワークであり、それはドメインイベント+非同期パターンを供給し、詳細はます。https:// jdon.dev.java.net/する