4

CQRS で、DB 呼び出しを必要とするコマンドを検証する最良の方法は何ですか? たとえばOrder、コマンドを検証している集約がCommitOrderあり、十分な在庫がない限り、このコマンドを受け入れたくありません。この場合、コマンド ハンドラーは注文商品の在庫があるかどうかをどのように確認できますか? 書き込み側から読み取り側を照会できますか?

注:実装にはakkaを使用しています

4

1 に答える 1

7

集約がルールの検証を実行するために読み取りモデルにクエリを実行する必要がある場合、それを行う通常の方法はドメイン サービスを使用することです。クエリのコントラクトを指定するインターフェイスをサービスに渡します。そのコントラクトの実装により、クエリ。

ただし、クエリを実行して得られる答えは古いという事実に注意する必要があります。別の集合体に保存されたデータは、「最新」であると見なすことはできません。

また、要件を再確認する必要があります。多くのドメインでは、在庫が現在利用できない場合でも注文を受け入れることが望ましい. 結局のところ、注文はビジネス価値を付加する機会です。関係のない懸念を理由にそれを拒否したくはありません。これは、企業が「在庫切れ」の例外を軽減する方法をすでに理解している場合に特に当てはまります。

他の集計からのデータは古くなっていることに注意してください。注文を受け入れることができるように、システムの別の部分が現在在庫レベルを更新している可能性は十分にあります。

在庫がないときに注文をコミットする要件を緩和できない場合、および古いクエリ データの使用によるエラー率が許容できないほど高い場合は、現在の在庫レベルが同じ一貫性になるように集計を再設計する必要があります。オーダーコミットとしての境界。

于 2016-09-11T00:51:47.757 に答える