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

Need help improving a design with aggregate roots

我有以下场景:

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

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

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

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

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

如何建模?

谢谢!

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

两个限界上下文:

  • 购物:它有两个聚合(请求和购物)。

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

存在最终一致性:

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

(2) Shopping BC 发布 RequestAproved 事件。

(3) 身份验证 BC 是此事件的订阅者。它对创建 OwnerAcount 聚合的事件作出反应。

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

(5) Auth BC 发布 OwnerAcountCreated 事件。

(6) Shopping BC 订阅了此活动。它对创建商店聚合的事件作出反应。

创建 Shop 聚合的事务不同于创建 Request 聚合的事务。

这是一张图表:

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