两个聚合之间的数据重复

时间:2019-01-31 16:12:22

标签: domain-driven-design cqrs

作为微服务实现的两个有界上下文:

  • 用户管理
  • 会计

用户管理使用其UserName等托管聚合Email

另一方面,

在{strong> Accounting Accounting 受限上下文中,某些User成为CustomerCustomer有自己的工作流程,因此它是一个单独的集合。它的创建是由UserRegistered事件(发布/订阅机制)触发的。

要发送发票,帐户需要Customer的电子邮件地址。我想知道电子邮件地址(其数据主文件是User)是否应该成为集合Customer的一部分,这将需要同步{ {1}}。

我倾向于考虑更简洁的另一种解决方案是将User(及其更改)投影到会计中的 readmodel 。因此,汇总email address是其自身状态(例如付款工作流程)的数据主数据,但不是Customer已经给出的数据。

您怎么看?一般来说,两个聚合之间的数据重复是一件坏事吗?

1 个答案:

答案 0 :(得分:0)

  

您怎么看?一般来说,两个聚合之间的数据重复是一件坏事吗?

不。拥有一个由数据权威拥有的“主”副本和多个从属副本是没有错的。如果权限完全不在模型中,则您的所有副本都可能隶属于真实权限。

数据的重复副本具有自主权-即使当前没有可用的主副本,系统中的其他组件也可以使用其本地数据副本继续取得进展。

您确实需要在设计中多加注意-功能越接近所需数据的权威性,您遇到的问题就越少。

(请记住,缓存无效是两个难题之一)。

对此的简化示例可能是发票的付款状态。您的履行系统可能需要先了解是否已付款,然后才能发货。您的帐单系统拥有已支付发票的决定。两者之间共享一小部分信息。

但是履行系统的数据副本是从属的-履行系统无权拒绝已付款发票。 (当然,它可能有权提出“我们不能满足购买合同的要求”之类的例外情况报告。)