另一个聚合根中的聚合根引用
Aggregate root reference in another aggregate root
我目前有两个聚合根 - Customer
和 AddressBook
。两者都有一些需要保护的不变量。 Customer
引用了 AddressBook
,我不确定这是否是对我的域建模的正确方法,因为一个不能没有另一个,并且域对象应该使用工厂创建,我觉得我不应该允许在没有 AddressBook
的情况下创建 Customer
,反之亦然,但显然需要先创建一个。希望它有意义。
我应该如何解决我的问题?
另一个问题是:我们可以在单个事务中创建多个聚合根吗?我已经红了,在更新的情况下不应该这样做。
I currently have two aggregate roots - Customer and AddressBook. Both have some invariants that need to be protected. Customer has reference to AddressBook and I am not sure whether that is the correct way to model my domain because one cannot live without the other
如果没有另一个它们确实没有意义,您可能需要检查设计以查看它们是否真的属于同一一致性边界。
Can we create multiple aggregate roots in a single transaction?
从技术上讲,是的。这可能不是一个好主意。
当所有逻辑上不同的聚合存储在一起时,在单个事务中创建它们就很简单了。
但这也引入了一个约束:需要存储这些聚合 "together"。如果您的所有聚合都在同一个关系数据库中,则全有或全无事务不会成为问题。另一方面,如果每个聚合都持久化到一个文档存储中,那么您需要一个允许您在同一次写入中插入多个文档的存储。
如果您的聚合恰好存储在 不同的 文档存储中,那么协调写入就变得更加困难。
I would like to create closely associated AddressBook with him.... Maybe a domain event would be a more suitable option?
也许;使用域事件向处理程序发出信号以调用另一个事务是自动化工作的常见模式。有关流程管理器的详细介绍,请参阅 Evolving Business Processes a la Lokad。
我目前有两个聚合根 - Customer
和 AddressBook
。两者都有一些需要保护的不变量。 Customer
引用了 AddressBook
,我不确定这是否是对我的域建模的正确方法,因为一个不能没有另一个,并且域对象应该使用工厂创建,我觉得我不应该允许在没有 AddressBook
的情况下创建 Customer
,反之亦然,但显然需要先创建一个。希望它有意义。
我应该如何解决我的问题?
另一个问题是:我们可以在单个事务中创建多个聚合根吗?我已经红了,在更新的情况下不应该这样做。
I currently have two aggregate roots - Customer and AddressBook. Both have some invariants that need to be protected. Customer has reference to AddressBook and I am not sure whether that is the correct way to model my domain because one cannot live without the other
如果没有另一个它们确实没有意义,您可能需要检查设计以查看它们是否真的属于同一一致性边界。
Can we create multiple aggregate roots in a single transaction?
从技术上讲,是的。这可能不是一个好主意。
当所有逻辑上不同的聚合存储在一起时,在单个事务中创建它们就很简单了。
但这也引入了一个约束:需要存储这些聚合 "together"。如果您的所有聚合都在同一个关系数据库中,则全有或全无事务不会成为问题。另一方面,如果每个聚合都持久化到一个文档存储中,那么您需要一个允许您在同一次写入中插入多个文档的存储。
如果您的聚合恰好存储在 不同的 文档存储中,那么协调写入就变得更加困难。
I would like to create closely associated AddressBook with him.... Maybe a domain event would be a more suitable option?
也许;使用域事件向处理程序发出信号以调用另一个事务是自动化工作的常见模式。有关流程管理器的详细介绍,请参阅 Evolving Business Processes a la Lokad。