私たちは現在、(Web) アプリケーションを構築する新しい方法を調査しており、1 つの方法として頭に浮かぶのは CQRS です。これについては、まだいくつかの質問があります。
私の理解が正しければ、これはおそらく 2 つ以上のドメイン モデル、1 つのコア ドメイン モデル、および Web アプリケーション用の 1 つの読み取りモデルを持つことを意味します。
このコア ドメイン モデルは、webapp によって直接書き込まれるのではなく、別のサービスによって書き込まれます。NServiceBus を使用してパブリッシャー/ハンドラーを作成し、webapp がユーザーによる変更を公開できるようにすることを考えています。サブスクライバーはメッセージを処理し、コア ドメイン モデルと読み取りモデルを更新します。
私たちが達成したいこと:
ユーザー A は、10 個の新しいオブジェクト (本など) を作成します。
メッセージ サブスクライバーには処理するメッセージが大量にあるため、ドメイン モデルが更新されるまでに数分かかります。
ユーザー A がページを更新すると、作成したばかりの 10 冊の本が表示されます。
ユーザー B がページを更新するとき、実際にはこれらの項目を表示する必要はありません。
これらの 10 個の新しいオブジェクトをどこに保管するのが最適ですか?
このデータを読み取りモデルの「古い」データとマージする最良の方法は何ですか?
ユーザー B もこれらの新しいアイテムを見る必要があるとしましょう。その場合、このデータを保存する最善の方法は何でしょうか?
2 人の異なるユーザーが同時に同じ本を追加した場合の最善の対処法は何ですか? (本の説明を除いて、すべてのデータは同じです。それはまだ同じ本です:)
コア ドメイン モデルにまだ書き込まれておらず、一意の ID を持っていないこれら 10 個のオブジェクトの 1 つに対する更新をどのように処理できますか?