在另一个聚合根中聚合根引用

时间:2018-03-04 20:38:39

标签: java domain-driven-design aggregateroot

我目前有两个聚合根 - CustomerAddressBook。两者都有一些需要保护的不变量。 Customer引用AddressBook并且我不确定这是否是建模我的域的正确方法,因为一个人不能没有另一个,并且因为域对象应该使用工厂创建我觉得我不应该允许创建Customer而不AddressBook,反之亦然,但显然需要在另一个之前创建。希望它有意义。

我该如何解决我的问题?

其他问题是:我们可以在单个交易中创建多个聚合根吗?我发红了,以防万一更新。

1 个答案:

答案 0 :(得分:1)

  

我目前有两个聚合根 - Customer和AddressBook。两者都有一些需要保护的不变量。客户参考了AddressBook,我不确定这是否是建模我的域的正确方法,因为没有其他人就无法生存

如果没有对方真的没有意义,您可能需要检查设计,看看它们是否真的属于同一个一致性边界。

  

我们可以在单个交易中创建多个聚合根吗?

技术上,是的。这可能不是一个好主意。

当所有逻辑上不同的聚合存储在一起时,在单个事务中创建它们很简单。

但这也引入了一个约束:那些聚合需要存储在一起"在一起"。如果所有聚合都在同一个关系数据库中,则全部或全部事务不会成为问题。另一方面,如果每个聚合持久存储到文档存储中,那么您需要一个允许您在同一个写入中插入多个文档的存储。

如果您的聚合恰好存储在不同的文档存储中,那么协调写入会变得更加困难。

  

我想与他建立密切相关的AddressBook ....也许域事件会是更合适的选择?

也许;使用域事件来通知处理程序调用另一个事务是自动化工作的常见模式。有关流程经理的详细介绍,请参阅Evolving Business Processes a la Lokad