6

DDDでGregYoundによるこのビデオを見たことがある

http://www.infoq.com/interviews/greg-young-ddd

メモリ内に変更がある場合、DDDを使用してコマンドクエリ分離(CQS)を実装するにはどうすればよいでしょうか。

CQSを使用すると、2つのリポジトリがあります。1つはコマンド用、もう1つはクエリ用です。2つのオブジェクトグループ、コマンドオブジェクトとクエリオブジェクト。コマンドオブジェクトにはメソッドのみがあり、オブジェクトの形状を公開できるプロパティはなく、画面にデータを表示するために使用することはできません。一方、クエリオブジェクトは、画面にデータを表示するために使用されます。

ビデオでは、コマンドは常にデータベースに送られるため、クエリリポジトリを使用して、更新されたデータをフェッチし、画面に再表示できます。

CQSをASP.NETの編集画面のようなもので使用できますか?変更はメモリで行われ、変更がデータベースに永続化される前に、画面を変更で数回更新する必要がありますか?

例えば

  1. クエリリポジトリからクエリオブジェクトをフェッチして画面に表示します
  2. 編集をクリックします
  3. クエリオブジェクトリポジトリからクエリオブジェクトを再フェッチし、編集モードでフォームに表示します
  4. フォームの値を変更します。これにより、コマンドオブジェクトが自動ポストバックされてフェッチされ、関連するコマンドが発行されます。
  5. 何をすべきか:コマンドが計算フィールドに変更を加えたときに、更新されたオブジェクトを表示する必要があります。コマンドオブジェクトがデータベースに保存されていないため、クエリリポジトリを使用できません。また、CQSでは、画面に表示するコマンドオブジェクトの形状を公開することを意図していません。画面に表示する更新された変更を含むクエリオブジェクトをどのように取得しますか。

私が考えることができるいくつかの可能な解決策は、セッションリポジトリ、またはコマンドオブジェクトからクエリオブジェクトを取得する方法を用意することです。または、CQSはこのタイプのシナリオには適用されませんか?

ビデオでは、変更がすぐにデータベースに保持されるように見えますが、ドメインオブジェクトへの変更のバッチ処理と、変更されたドメインオブジェクトのビューの更新の問題に対処する、CQSを使用したDDDの例は以前に見つかりませんでした。最後に、ドメインオブジェクトを保存するコマンドを発行します。

4

6 に答える 6

3

したがって、ここで必要と思われるのは、より詳細なコマンドです。

例: ユーザーが Web ページを操作します (たとえば、ショッピング カートでチェック アウトを行うとします)。

情報を取得する複数のページがコマンドを構築しています。ユーザーが実際にすべての情報をチェックアウトするまで、コマンドは送信されません。ドメインへの 1 つのコマンドですべての情報が送信されます。これを「チェックアウト」コマンドと呼びましょう。

プレゼンテーション モデルは、この種の対話を抽象化するのに非常に役立ちます。

お役に立てれば。

グレッグ

于 2009-11-16T09:12:48.390 に答える
1

また、あなたの懸念の残りのために...

これらは、CQRSとは対照的に、結果整合性に関する懸念です。結果整合性を保つ必要はありません。コマンドの処理をレポートストアに書き込む(または前述のように両方に同じ物理ストアを使用する)こともできます。私は実際に、これを基本アーキテクチャとして実行し、後でコストがかかるため、必要に応じて結果整合性を導入することをお勧めします。

于 2009-11-16T09:17:11.720 に答える
1

本当にこれに CQS を使用したい場合は、クエリ リポジトリと書き込みリポジトリの両方が同じバッキング ストアへの参照を持っていると言えます。通常、この参照は外部データベース経由ですが、あなたの場合は List<T> などである可能性があります。

于 2009-10-04T03:30:16.320 に答える
0

メモリでは、通常、オブザーバーデザインパターンを使用します。

実際には、常にこのパターンを使用する必要がありますが、ほとんどのデータベースは、DB内の何かが変更されたときにアプリのメソッドを呼び出す効率的な方法を提供していません。

于 2009-09-25T12:09:43.683 に答える
0

Patterns of Enterprise Application ArchitectureUnit of Work設計パターンは、CQS と非常によく一致します。これは基本的に、データベースにデータを永続化する大きなコマンドです。

于 2009-09-27T10:56:10.487 に答える
-2

JdonFrameworkはCQRSDDDJavaフレームワークであり、ドメインイベントと非同期パターンを提供します。詳細はhttps://jdon.dev.java.net/です。

于 2009-12-24T06:22:56.173 に答える