首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >读取包含来自多个聚合根(不同上下文)的数据的模型

读取包含来自多个聚合根(不同上下文)的数据的模型
EN

Stack Overflow用户
提问于 2019-05-24 20:22:32
回答 1查看 126关注 0票数 1

我很好奇如何将来自多个聚合根的数据连接到事件源聚合根的读取模型中。我可以试着举一个简单的例子:

如果我有一个名为Cart的聚合根,它在它的事件流中支持以下事件(括号中的属性-请记住,这是一个简单的示例):

代码语言:javascript
复制
AddProductToCart(cartId: Int, productId: Int)
RemoveProductFromCart(cartId: Int, productId: Int)
AddUserLicenseToProduct(cartId: Int, productId: Int, userId: Int)
RemoveUserLicenseFromProduct(cartId: Int, productId: Int, userId: Int)
EmptyCart(cartId: Int)

当使用来自该事件流的数据来投影读取模型时,这是可以的。例如,我可以投影一个cart对象,如下所示:

代码语言:javascript
复制
Cart(cartId: Int, products: List[Product])

Product(productId: Int, userLicenses: List[UserLicense])
UserLicense(userId: Int)

但是如何将来自另一个上下文中的另一个聚合根的数据连接到这个购物车投影中呢?例如,如果我想使用位于另一个上下文中的Product聚合根目录中的数据来扩展读取模型。假设我想用productName和productType来扩展它。

考虑到我们在一个分布式系统中工作,其中Product和Cart将位于不同的服务/应用程序中。

我认为一种解决方案是在命令和事件中包含数据。但是,如果有更大的读取模型,其中包含来自多个聚合根的数据,那么这似乎不能很好地扩展。此外,还必须能够核化和重建读取模型。

我认为另一种解决方案是将数据从其他聚合根复制到其他应用程序/服务/上下文的存储中。例如,将productName和productType数据复制到购物车应用程序拥有的存储中,但不将其作为购物车事件流的一部分。购物车应用程序则必须侦听事件(例如ProductCreated、ProductNameChanged)以保持数据更新。我想这可能是一个可行的解决方案。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56292628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档