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

问题描述 投票:0回答:1

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

我该如何解决我的问题?

其他问题是:我们可以在单个交易中创建多个聚合根吗?我发红了,在更新的情况下不应该这样做。

java domain-driven-design aggregateroot
1个回答
1
投票

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

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

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

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

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

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.