需要帮助改进具有聚合根的设计

问题描述

我有以下场景:

您需要先创建一个请求才能成为商店并获得所有者帐户。

所以有一天你注册一个请求。 经理审核并批准您的请求后 2 天,这意味着系统必须创建商店和所有者帐户。

在我的模型中,我认为 Request、Shop 和 Owner Account 是 3 个聚合根,但后来我读到我不能在一次交易中更新多个聚合,因为它们可能是(实际上它们是,因为 Owner Account位于单独的数据库服务器中的外部身份验证服务中。

问题是..我仍然有一个请求,当它获得批准时,我需要创建 2 个聚合根,即 Shop(具有所有商店属性,我只有一些数据不变量,例如联系限制电子邮件或电话)和所有者帐户。

然后可以允许一个所有者帐户编辑其他人的商店(例如合作者)

我该如何建模?

谢谢!

解决方法

根据您的要求,我的设计是:

两个有界上下文:

  • Shopping:它有两个聚合(Request 和 Shop)。

  • 身份验证:一个聚合 ( OwnerAcount )。

存在最终一致性:

(1) 请求聚合将有一个方法“aprove”。此方法创建 RequestAproved 事件。

(2) Shopping BC 发布 RequestAproved 事件。

(3) Authentication BC 是该事件的订阅者。它对创建 OwnerAcount 聚合的事件做出反应。

(4) OwnerAcount聚合的构造方法创建OwnerAcountCreated事件。

(5) Auth BC 发布 OwnerAcountCreated 事件。

(6) Shopping BC 是此事件的订阅者。它对创建 Shop 聚合的事件做出反应。

创建 Shop 聚合的交易与创建 Request 聚合的交易不同。

这是一个图表:

(注意:每种事件类型都有一个消息队列。另一种选择是所有事件类型只有一个队列)

enter image description here