7

CQRS パターンに従って実装する必要がある次のシナリオがあります。

  1. ユーザーがログインする
  2. ユーザーは保険の詳細を入力します
  3. ユーザーは適用する決定を求めます
  4. ユーザーは決定の結果を表示します

これはかなり簡単に思えますが、私の問題はステップ 3 と 4 の間にあります。ステップ 3 でApplyForDecision、引受サービスから決定を取得するコマンドを送信し、その決定の結果を含むイベントが読み取りストアの BUS に送信されます。後でそれを消費し、決定結果でビュー テーブルを更新します。

問題はUIにあります。CQRSでは読み取りモデルが「すぐに」更新されないため、決定が適用されていることをユーザーに知らせるにはどうすればよいですか?決定が進行中であり、「すぐに」更新されることをUIに表示するにはどうすればよいですか? ' 到着?

決定がまだ適用されていない可能性があるため、ユーザーがログアウトして再度ログインできるようにする必要もあります。UI に「保留中の決定画面」を表示するにはどうすればよいですか?

4

2 に答える 2

7

答えは、決定が適用されたことを示すイベントをすぐに発生させ、読み取り DB を更新し、その時点までに読み取り DB が更新されているかどうかに関係なく、保留中の決定画面にすぐにリダイレクトすることです。静的テキスト「保留中の決定が連絡されます」またはそれらの線に沿ったもの。彼らは更新したり、後で戻ったりすることができ、実際のデータを取得する可能性が高くなります. その後、決定が決定されると、DecisionMade イベントが発生し、読み取り DB が更新され、状況に応じて電子メールが送信されます。

これは、CQRS で対処しなければならない結果整合性とのトレードオフです。フォームのドメイン オブジェクトのプロパティに変更を加えると、バックエンドが雑用を行っている間にユーザーが受け取る即時のフィードバックで偽装することがよくあります。はい、少し醜いですが、ユーザーはそれを知りません。

于 2010-11-25T08:14:10.080 に答える
3

私見の解決策は、コマンドが「ApplyForDecisionRequested」および「ApplyForDecisionHandled」イベントを発行し、それに応じて読み取りモデルを更新できるようにすることです。

于 2010-09-10T20:15:51.280 に答える