ドメイン イベントを使用して読み取りモデルを構築するシステムのフローについて、少し混乱しています。特に、ユーザーがコマンドを完了したときにデータ (およびそのビュー) が変更されることを期待しているにもかかわらず、システム アーキテクチャ (イベントを発行するための非ブロック呼び出し) により、実際のデータベースは変更前に変更されない可能性があるという事実にどのように対処すればよいでしょうか。ページがリロードされますか?
イベントとサービス バスを使用して、システムの 1 つの設計を CQRS とより一致させたいと考えています。
私のフローが次のようになるとしましょう:
ユーザーはビューのボタンをクリックして、アカウントから支払い方法を削除するタスクを実行します。
コントローラーは PaymentMethodRemovalService を呼び出し、accountId と paymentMethodId を渡します。
コントローラーは AccountRepository を使用してアカウントを取得し、account.RemovePaymentMethod(id) を呼び出します
アカウントは操作が実行できることを検証し、イベント PaymentMethodRemovedMessage(accountId, paymentMethodId) を発行します
イベント発行は非同期であるため、サービスから戻り、コントローラーからビューを返す必要がありますが、実際のデータはまだ更新されていません。
ハンドラー IHandle< PaymentMethodRemovedMessage > がイベントを受け取り、DB から実際の行を削除します。
それで、男は何をするのですか?
たとえば、支払い方法を表示していた div を削除するだけです。これは AJAX シナリオで機能する可能性がありますが、JavaScript 以外のクライアントをサポートするために Post-Redirect-Get を使用している場合はどうでしょう。次に、おそらく更新される前に、Get を起動し、Query 側からデータを読み取ります。
支払い方法を削除するリクエストが送信されたことを示す通知を表示するだけですか? (友好的ではないように見えますが、注文を送信するのには意味がありますが、住所の変更などには意味がありません)。
変更を分離された非同期イベントとして実装し、現在の変更を反映するユーザー データを表示する方法はありますか?
編集:私の質問はCQRS、DDD同期レポートデータベース に非常に似ています。そこに与えられた答えとここでほのめかされた答えには、少し臭いがあります-帯域外の更新を表示するためにUIを混乱させますいわば読み取りDBです。私はもう少しきれいなものを望んでいました。