我的问题与 CQRS(命令和查询责任分离)和构建读取模型(视图)的机制有关。据我了解,读取模型是由事件处理程序构建的。这些处理程序(也称为非规范化程序)接收域事件并使用这些事件来构建不同的数据视图。
特定事件携带有关在域模型中完成的更改的信息。我认为在某些情况下,此信息不足以构建视图 - 即未更改的字段,未更改的实体在此类事件中丢失等。
所以我的问题是:
是否允许负责构建读取模型的非规范化程序不仅访问事件,还访问:
- 事件中直接引用的更改实体?
- 更改了聚合根以及与此聚合相关的任何实体?
- 从存储库中获取的任何实体?
- 有什么看法吗?
您对事件处理程序(非规范化程序)允许的依赖项有何看法?
编辑:刚刚在上面的问题中添加了简单的例子:
假设以下模型:
AR:ProductOffering * 名称 * 描述 * 类别 * 价格
AR: Customer * name * type * method: purchaseProduct(productOffering) 发出 ProductPurchasedByCustomer 事件
实体:ProductInstance * customer * productOffing
事件:ProductPurchasedByCustomer * customerId * productOfferingId
视图:ProductInventoryView * customerId * productOfferingId * customerType * productOfferingName * productOfferingCategory * price
如何仅使用 ProductPurchasedByCustomer 事件构建 ProductInventoryView?如何编写非规范化程序以查看有关 customerType、productOfferingName 等的信息?我应该从不同的视图中查找有关 customerType 和 productOfferingName 的其他信息吗?