Domain driven design 查找整个域中的聚合根使用情况
事实上,实体甚至值对象可能包含对聚合根的引用。 此外,根据定义,聚合根独立于它们自己,它们本质上有一个存储库,我最终无法删除该聚合根 作为我的GUI/工作流的一项要求,客户希望查看特定聚合根的引用位置,尤其是因为他希望/应该能够检查是否可以“安全地”删除该AR 我目前的设计只有从所讨论的实体到另一个AggregateRoot的导航,因此目前没有简单的方法来找到相反的方向 由于这肯定不是一个单一的情况,我想知道这通常是如何做到的 附录: 考虑下面的例子;我们有一个Domain driven design 查找整个域中的聚合根使用情况,domain-driven-design,Domain Driven Design,事实上,实体甚至值对象可能包含对聚合根的引用。 此外,根据定义,聚合根独立于它们自己,它们本质上有一个存储库,我最终无法删除该聚合根 作为我的GUI/工作流的一项要求,客户希望查看特定聚合根的引用位置,尤其是因为他希望/应该能够检查是否可以“安全地”删除该AR 我目前的设计只有从所讨论的实体到另一个AggregateRoot的导航,因此目前没有简单的方法来找到相反的方向 由于这肯定不是一个单一的情况,我想知道这通常是如何做到的 附录: 考虑下面的例子;我们有一个地址作为实体,还有一个包含日期和地
地址
作为实体,还有一个包含日期
和地址
的值对象HomeVisit
(为了简单起见)。
到目前为止,建模不需要能够从地址
导航到家庭访问
,因为通常不鼓励双向关联。
但您现在应该可以看到这个用例:出于任何原因,我可能需要在删除或修改地址之前找出该地址当前使用的位置(可能是服务技术人员正在前往该地址的路上,我需要知道这一点)
你可以争辩说,在这些情况下,必须有一个服务或类似的服务才能找到答案,但想象一下,有一个第三方模块带来了家访
VO,并以某种方式匿名使用地址
;至少这是我希望它实现的方式。答案似乎是:通过域或应用程序服务,必要时涉及相应的存储库
因此,对引用的检查必须使用AddressService进行硬编码,其方法类似于deleteAddressByIdentifier
。然后,该方法需要检查或调用一个方法isTechnicianOnWayToAddress()
,该方法再次相应地查询存储库;或者实现目标所需的任何东西