加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

CQRS – 允许使用事件和其他信息源构建读取模型的依赖关系

发布时间:2020-12-14 04:56:41 所属栏目:百科 来源:网络整理
导读:我的问题与CQRS(命令和查询责任隔离)和构建阅读模型(视图)的机制有关.据我所知,读模型是由事件处理程序构建的.这些处理程序(也称为非规范化程序)接收域事件并使用这些事件来构建不同的数据视图. 特定事件包含有关域模型中所做更改的信息.我认为这些信息在某
我的问题与CQRS(命令和查询责任隔离)和构建阅读模型(视图)的机制有关.据我所知,读模型是由事件处理程序构建的.这些处理程序(也称为非规范化程序)接收域事件并使用这些事件来构建不同的数据视图.

特定事件包含有关域模型中所做更改的信息.我认为这些信息在某些情况下不足以构建视图 – 即没有更改的字段,在这种情况下没有更改的实体丢失等.

所以我的问题是:

是否允许负责构建读取模型的非规范化器不仅访问事件,还允许:

>直接引用更改的实体
在事件?
>更改了聚合根和任何
与此汇总相关的实体?
>从存储库中获取的任何实体?
>任何观点?

您对事件处理程序(非规范化程序)的允许依赖关系有何看法?

编辑:刚刚在上面的问题中添加了简单示例:

假设以下模型:

AR:ProductOffering
?* 名称
?*描述
?*类别
?* 价钱

AR:客户
?* 名称
?*类型
?*方法:发出的purchaseProduct(productOffering)
ProductPurchasedByCustomer活动

实体:ProductInstance
?*客户
?* productOffering

事件:ProductPurchasedByCustomer
?* 顾客ID
?* productOfferingId

view:ProductInventoryView
?* 顾客ID
?* productOfferingId
?* 客户类型
?* productOfferingName
?* productOfferingCategory
?* 价钱

如何仅使用ProductPurchasedByCustomer事件构建ProductInventoryView?如何编写denormalizer以查看有关customerType,productOfferingName等的信息?
我应该从不同的视图中查找有关customerType和productOfferingName的其他信息吗?

解决方法

如果事件消费者需要更多信息,那么事件生成者可以提供所需的信息,尽管它没有改变.不应将事件源视为ORM.请注意,关于如何获取信息,事情可能会变得棘手,但不要让事情复杂化(但).如果事件未提供事件处理程序,则事件处理程序可以使用读取模型的状态(数据).但这样做需要您知道是否可以使用哪些数据.它需要您将时间与数据相结合.消息/事件很可能无序处理.因此,在事件中提供与事件相关的信息要容易得多.在做任何其他事情之前尝试这样做.不要尝试从特定于您的阅读模型的事件处理程序访问您的域,这只是讨厌的耦合.最后一点,聚合可以从其他聚合中复制数据,以提供事件中所需的数据.请注意,从那时起,您必须开始考虑如何在首先复制数据的聚合中保留新数据.可能会让你更困惑……

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读