Domain driven design 领域驱动设计中的聚合关系
我有一个关于领域驱动设计中聚合之间关系的问题 我有以下情况:我有一个汇总(问卷),其中有一些孩子(问题)。这些问题是实体,但由于它们位于问卷聚合中,因此它们可以具有本地身份(即id为1234的问卷中id为1的问题;我可以在另一个问卷中有id为1的另一个问题)。因此,要引用一个问题,您必须始终使用其父问卷id对其进行限定 另一方面,我有另一个聚合(收集活动),它存储问卷中问题的数据(响应集)(收集活动通过其id指向问卷,响应集通过其id再次指向问题)。我可以有几个收集活动(可能发生在不同的时间),每个收集活动存储不同的响应集,但针对相同的问卷(和问题) 所以我的问题是:我是否设计得很好(根据DDD)?或者我是否必须将问卷和问题作为单独的集合保存,以便从收集活动/响应集中引用它们Domain driven design 领域驱动设计中的聚合关系,domain-driven-design,Domain Driven Design,我有一个关于领域驱动设计中聚合之间关系的问题 我有以下情况:我有一个汇总(问卷),其中有一些孩子(问题)。这些问题是实体,但由于它们位于问卷聚合中,因此它们可以具有本地身份(即id为1234的问卷中id为1的问题;我可以在另一个问卷中有id为1的另一个问题)。因此,要引用一个问题,您必须始终使用其父问卷id对其进行限定 另一方面,我有另一个聚合(收集活动),它存储问卷中问题的数据(响应集)(收集活动通过其id指向问卷,响应集通过其id再次指向问题)。我可以有几个收集活动(可能发生在不同的时间),
我希望这是有意义的,谢谢你。问问你自己:应该保护哪些不变量 在您的情况下,您必须确保在活动期间回答的问题存在(即其索引介于0和问卷中的问题数-1之间),并且是允许的;另一个不变量可能是,在回答至少一个问题后,不得修改问卷;在这些情况下,活动必须与问卷同步。我至少看到两种解决方案:
Questionare
聚合,将问题、活动和答案作为子实体,这样您就可以保护这些不变量;这对性能有一定影响,但只有您知道这是可以接受的Questionare
aggregate(如QuestionAdded
,QuestionRemoved
)中的一些事件作为命令转发到Campaingn
aggregate,以使它们保持同步。我更喜欢这个解决方案,因为它能更好地区分责任一个问题本身,在问卷之外,是没有意义的。这是一个值得保护的不变量吗?而且,如果我们假设是这样,那么我如何“引用”调查问卷集合之外的问题,收集活动集合内部的问题,以链接响应集?我正在尝试解决这个问题,但我需要帮助。请参阅我的更新答案