我有一个聚合体,它由一个名为Master的根实体和一个名为Detail的叶子构成。因此,Master实体具有Detail实体的集合。我没有将Details集合暴露给客户端,因为我不想让客户端直接向其添加Detail项。相反,我在我的主实体上有一个AddDetail方法,它在添加新的Detail项时立即验证域不变量,并允许我们在该位置应用我们的域规则。详细信息作为只读IEnumerable属性公开。 当我想在MasterRepository中加载Details项时,问题出现了。由于没有项目可以添加到Details集合中,我不知道如何加载作为Master实体状态一部分的Details。另一方面,我不认为在加载主实体的状态时使用AddDetail方法是一个好习惯,因为那时规则已经应用,并且在加载实体的状态时验证它们将是冗余重载。 。此外,添加新的详细信息会触发一些我不希望在加载实体时发生的域事件。
答案 0 :(得分:2)
我不认为在加载Master实体的状态时使用AddDetail方法是一个好习惯
你是对的,使用AddDetail
方法并不是一个好主意。
我不知道如何加载作为Master实体状态一部分的Details。
如何加载Master
实体的其他属性?
我提到的很多可用选项回答了另一个问题(How to retrieve Domain Object from Repositories):
由于Detail
实体的集合只是Master
的属性,我会使用一种方法来加载其他属性。
答案 1 :(得分:1)
您没有说明您使用的是哪种语言,但ORM框架通常会通过反射直接访问Master的内部字段。
如果您自己滚动或使用没有反射的语言,您可以添加一个内部实用程序类(例如,在同一个程序包中),该实用程序类具有对字段的包/朋友访问权限,并且可以由存储库用于访问字段直接