如何从一个视图创建两个聚合

时间:2018-08-16 02:36:37

标签: domain-driven-design cqrs aggregateroot

我有两个分别称为CompanyAggregateProfileAggregate的聚合,并且它们的聚合根分别是CompanyProfile,一个公司可以有很多配置文件。负责创建公司的视图也可以同时创建配置文件(有一个列表和一个附加按钮,这是一个视图要求),因此,当用户同时单击保存按钮时聚集体应保存。问题是实现这一目标的最佳方法是什么? 我想到的工作流程如下:

  1. 调用公司的API创建公司;
  2. 获取创建的公司ID;
  3. 调用个人档案的API创建每个个人档案;
  4. 完成。

应该从客户端还是从我们的API网关(API分解与Composition相对)进行这些调用,还是应该使用域事件?在后一种情况下,我必须将个人档案数据传递给Company Aggregate,以引发引发边界冲突的域事件。

有人会说Profile应该放在Company Aggregate中,但事实并非如此,因为Profile可以被另一个Roots直接引用。

1 个答案:

答案 0 :(得分:0)

由于您提到可以创建概要文件,但不是强制性的,因此我将在CQRS级别上使其成为两个单独的命令。您关于将个人资料数据传递给公司的直觉肯定是正确的。个人资料看起来并不像公司成立时的副产品。

另一方面,在客户端级别使其成为两个不同的请求可能会导致一些排序问题。除非您有某种方式为公司预先生成一个标识符,以便将两个请求都放入,否则我会将这两个请求打包在一个HTTP请求中。