@Hippoom はあなたを正しい方向へと導きます。
CQRS Journey (何を読んでいるか) は次のように述べています。
チームは後に、システムが注文を保存するかどうかを確認するためのこのメカニズムを、Post-Redirect-Get パターンの実装に置き換えました。次のコード サンプルは、StartRegistration アクション メソッドの新しいバージョンを示しています。Post-Redirect-Get パターンの詳細については、Wikipediaの記事Post/Redirect/Getを参照してください。
[HttpPost]
public ActionResult StartRegistration(string conferenceCode,
OrderViewModel contentModel)
{
...
this.commandBus.Send(command);
return RedirectToAction(
"SpecifyRegistrantDetails",
new { conferenceCode = conferenceCode, orderId = command.Id });
}
アクション メソッドは、コマンドを送信した直後に SpecifyRegistrantDetails ビューにリダイレクトするようになりました。次のコード サンプルは、ビューを返す前に、SpecifyRegistrantDetails アクションがリポジトリ内の注文をポーリングする方法を示しています。
[HttpGet]
public ActionResult SpecifyRegistrantDetails(string conferenceCode, Guid orderId)
{
var draftOrder = this.WaitUntilUpdated(orderId);
...
}
この 2 番目のアプローチの利点は、StartRegistration ポスト アクションの代わりに Post-Redirect-Get パターンを使用することであり、ブラウザーの進むおよび戻るナビゲーション ボタンでより適切に機能することです。
ここでは、ミリ秒または最悪の場合数秒の結果整合性について話しています。したがって、PRG パターンは完璧に適合します。
とにかく、あちこちで、結果整合性 UI に関する記事を読むことができます。
コメントの編集を投稿:
彼女のe Udi Dahan は次のように述べています。
どのような場合に CQRS を避けるべきですか?
答えはほとんどの場合です。
CQRS を正しく実行していることを示す最も強力な指標は次のとおりです。集計ルートはサガです
したがって、あなたの問題は、HTTP アプリケーションで CQRS がどのように機能するかを発見することではないと思います。あなたの問題は、あなたが疑問に思っているプロセスとユースケースでは、CQRSを避けるべきだということです.