私はCQRSデザインアプローチ(パターンとアーキテクチャ)を学び、新しいプロジェクトに適用しようとしていますが、欠けているようです。CQRSクライアントアプリケーションでUIリフレッシュを引き起こす要因は何ですか?
私のクライアントアプリケーションはクエリを実行し、読み取りモデルから軽量の読み取り専用DTOのリストを取得します。ユーザはアイテムを選択し、ボタンをクリックして何らかのアクションを開始する。アクションは、対応するコマンドオブジェクトを作成して書き込みモデルに送信することによって実行されます(コマンドハンドラがアクションを実行し、データストアを更新するなど)。しかし、ある時点で、UIを更新してアクションの結果としてのアプリケーションの状態。
元のリストを更新する時期はどのようになっていますか?
追加情報
私はCQRSを議論するほとんどの記事/ブログが彼らの例ではMVCのクライアントアプリケーションを使用していることに気づきました。私は今、Silverlightクライアントで作業しています。この場合、パターンが単純に機能しないかどうか疑問に思っています。
フォローアップの質問
パルトロミエの反応とその後の議論の詳細について考えた後、私はCQRSでのエラー処理について疑問に思って。コマンドは基本的には非同期操作であることを考えると、エラー状態をUIにどのように報告するのでしょうか?
私は2つの形式のいずれかを取るために「UIをリフレッシュ」を参照:
- 操作が失敗した操作が成功し、データが変更されたとUIは、これらの変更
- を反映するように更新する必要があり、データを持っています変更されていないが、ユーザーには、障害と潜在的な是正措置が通知されるべきである。
MVCのPost-Redirect-Getパターンであっても、操作の結果を知るまで、本当にリダイレクトすることはできません。私がこれまで見てきた例では、これらの現実の懸念事項に対処していません。
私は、ユースケースに応じて、2つの技術を使用私のASP.NET MVC 3では
元の投稿から来ていたのと同じ考え方に近いような素晴らしいサマリーと聞こえます。私はドメイン・イベントを使用して合格/不合格を伝えないようにし、タスク・パラレル・ライブラリー(TPL)を活用して非同期性を維持しながら自分のニーズに対応しました。私の場合、コマンドバスにメッセージを送信すると、私はそのタスクに戻ります。これにより、非同期操作が完了したときに通知を受け取ることができ、例外を呼び出しコードに戻すことができます。これで、タスクの継続中のデータを簡単に更新できます。 – SonOfPirate
私はこれがCQRSと一貫していると信じています。なぜなら、コマンドとクエリは依然として分離されていますが、あなたが言ったように、UIが望ましい/期待どおりに機能するならば、 – SonOfPirate
さらに、これはMVVMにうまく収まります! – SonOfPirate