私の質問は、CQRS (Command and Query Responsibility Segregation) と、読み取りモデル (ビュー) を構築するメカニズムに関するものです。私が理解している限り、読み取りモデルはイベント ハンドラーによって構築されます。これらのハンドラー (デノーマライザーとも呼ばれます) はドメイン イベントを受け取り、これらのイベントを使用してデータのさまざまなビューを構築します。
特定のイベントは、ドメイン モデルで行われた変更に関する情報を伝達します。この情報は、場合によってはビューを構築するのに十分ではないと思います-つまり、フィールドが変更されていない、変更されていないエンティティがそのようなイベントで欠落しているなどです。
だから私の質問は:
読み取りモデルの構築を担当するデノーマライザーがイベントだけでなく、以下にもアクセスすることは許可されていますか?
- イベントで直接参照されるエンティティが変更されましたか?
- 集約されたルートと、この集約に関連するエンティティを変更しましたか?
- リポジトリからフェッチされたエンティティはありますか?
- 任意のビュー?
イベント ハンドラー (デノーマライザー) に許可されている依存関係についてどう思いますか?
編集:上記の質問に簡単な例を追加しました:
次のモデルがあるとします。
AR: ProductOffering * 名前 * 説明 * カテゴリ * 価格
AR: 顧客 * 名前 * タイプ * メソッド: ProductPurchasedByCustomer イベントを発行する purchaseProduct(productOffering)
エンティティ: ProductInstance * 顧客 * productOffering
イベント: ProductPurchasedByCustomer * customerId * productOfferingId
ビュー: ProductInventoryView * customerId * productOfferingId * customerType * productOfferingName * productOfferingCategory * 価格
ProductPurchasedByCustomer イベントのみを使用して ProductInventoryView を構築する方法は? customerType、productOfferingName などに関する情報をビューに表示するデノーマライザーを作成するにはどうすればよいですか? 別のビューから customerType と productOfferingName に関する追加情報を検索する必要がありますか?