作为微服务实现的两个有界上下文:
用户管理使用其User
,Name
等托管聚合Email
。
在{strong> Accounting Accounting 受限上下文中,某些User
成为Customer
。 Customer
有自己的工作流程,因此它是一个单独的集合。它的创建是由UserRegistered
事件(发布/订阅机制)触发的。
要发送发票,帐户需要Customer
的电子邮件地址。我想知道电子邮件地址(其数据主文件是User
)是否应该成为集合Customer
的一部分,这将需要同步{ {1}}。
我倾向于考虑更简洁的另一种解决方案是将User
(及其更改)投影到会计中的 readmodel 。因此,汇总email address
是其自身状态(例如付款工作流程)的数据主数据,但不是Customer
已经给出的数据。
您怎么看?一般来说,两个聚合之间的数据重复是一件坏事吗?
答案 0 :(得分:0)
您怎么看?一般来说,两个聚合之间的数据重复是一件坏事吗?
不。拥有一个由数据权威拥有的“主”副本和多个从属副本是没有错的。如果权限完全不在模型中,则您的所有副本都可能隶属于真实权限。
数据的重复副本具有自主权-即使当前没有可用的主副本,系统中的其他组件也可以使用其本地数据副本继续取得进展。
您确实需要在设计中多加注意-功能越接近所需数据的权威性,您遇到的问题就越少。
(请记住,缓存无效是两个难题之一)。
对此的简化示例可能是发票的付款状态。您的履行系统可能需要先了解是否已付款,然后才能发货。您的帐单系统拥有已支付发票的决定。两者之间共享一小部分信息。
但是履行系统的数据副本是从属的-履行系统无权拒绝已付款发票。 (当然,它可能有权提出“我们不能满足购买合同的要求”之类的例外情况报告。)