【发布时间】:2019-06-25 03:50:58
【问题描述】:
两个有界上下文,实现为微服务:
- 用户管理
- 会计
用户管理托管聚合User及其Name、Email等。
另一方面,一些Users 在Accounting 有界上下文中变为Customers。 Customer 有自己的工作流程,因此它本身就是一个聚合。它的创建由UserRegistered 事件触发(发布/订阅机制)。
为了发送发票,会计需要Customer的电子邮件地址。我想知道电子邮件地址(其数据主控是User)是否应该成为聚合Customer 的一部分,这将需要同步User 的每个电子邮件地址更改。
另一个我倾向于认为更简洁的解决方案是将email address(及其更改)投影到Accounting中的readmodel。因此,聚合 Customer 是其自身状态(例如支付工作流)的数据主控,但不是 User 已经给出的数据。
你怎么看?一般来说,两个聚合之间的数据重复是一件坏事吗?
【问题讨论】:
-
我不推荐在 CQRS 中使用它。但是为什么
CustomerAgg 需要电子邮件地址? -
Martin Fowler 对此有答案:martinfowler.com/eaaDev/EventCollaboration.html。基本上他说数据复制是解决方案。