私は最近、開始しようとしているグリーン フィールド プロジェクトの CQRS と DDD の調査を開始しました。Udi Dahan、Greg Young、Mark Nijhof などから多くの資料を学びました。これらは非常に役に立ち、概念をよく理解していると思います。しかし、これらを自分のドメインにどのように適用できるかについては、まだいくつかの疑問があります。
私のシステムは基本的に複雑なルール エンジンであり、特定の製品の最終価格はルールによって決定されます。製品の定義とルールは、管理者によってシステムに入力されます。ルールは、 「購入の目的」(再販、貸し出し)などの事前定義されたセットの値、またはAgeなどの自由形式の値を持つことができる事前定義されたプロパティのセットを使用して、管理者によって設計されます。
各製品には基本価格があり、ルールが適用される場合、基本的に基本価格に追加または削除されます。
非常に単純なサンプル ルールは次のようになります。
製品 X の場合、IF (購入目的 = 転売および年齢 > 25) の場合、基本価格に 25 ドルを追加します。
したがって、システムを使用するユーザーには 2 種類あります。管理者は、製品、ルール、および基本価格を定義します。what-if UI を介して入力したシナリオに基づいて価格を照会する他のユーザー。
ここでの私の混乱は次のとおりです。シナリオを実行してもドメインの状態はまったく変化しません。他の外部システム/人はシナリオ実行の結果に興味を持っていませんが、実行中のユーザー自身-価格の結果を返します特定のシナリオに適用可能なルールを実行した後の計算。たとえば、ユーザーが製品 Xを選択し、 (購入目的 = 再販および年齢 = 40)などの特定のシナリオの価格を照会する場合があります。. 繰り返しますが、この操作はドメインの状態をまったく変更しないので、クエリだと思います。しかし、最終的な価格を計算するためにシナリオ上で動作するルール エンジンがあり、実行されているドメイン ロジックとして分類できると思います。では、このロジックはどこに属しているのでしょうか。これは、読み取りモデルから離れて機能するクエリですか、それともドメイン モデルで実行する必要があるコマンドのシナリオを実行していますか? 繰り返しますが、ドメイン層はこれらのルールの場所のように感じますが、シナリオ実行の結果をユーザーに渡すにはどうすればよいでしょうか (このように考えるクエリのように感じます)。それとも、CQRS はこの特定の問題に対する適切なソリューションではないでしょうか?