我们如何处理下面有大量聚集体的聚集体根?
说我有一个Person
作为我的聚合根,并且有很多实体代表一个人可以进行的所有各种活动和事情。这些中的每一个彼此明显地分开并且具有它们自己的生命周期,并且可以存储在不同的数据库中。它们都取决于Person
的生命周期,但是,如果曾经删除Person
,则也都需要删除它们,因为它们不再相关。
如果Person
是所有这些对象的集合根,如何避免拥有一个试图覆盖所有这些对象的庞大存储库?
[如果这些东西都是它们自己的聚合根并且可以拥有自己的存储库,就可以了,如果要删除Person
,我要处理确保级联删除的整个问题?
“所有权”并不一定意味着聚合。
例如,Customer
“拥有”一个或多个Order
实例,但由于它们具有自己的生命周期,因此不属于Customer
集合。
级联删除可以由您的数据库技术强制执行,尽管这是另一种讨论。一个人可能很少需要或想要从数据库中删除实例。禁用Customer
可能是更可行的方法。当处理审计和/或立法等需要在最短时间段内存储数据的问题时,这甚至是一个更大的问题。存档是另一种选择。
An Aggregate Root
提供了一种控制对Domain
中的实体的访问的方法。这不一定意味着您应该始终拥有一个“聚合根”。什么是聚合根应该来自您的业务需求,而不一定是它们如何存储在数据库中。