首页 > 解决方案 > DDD - 大型聚合并在聚合之间强制不变

问题描述

我有点坚持以正确的方式应用领域驱动设计方式来建模这个问题。我想在旅行社建模旅行团。

我们在一个有限的上下文中拥有诸如乘客组成员之类的概念。这名乘客是一个大型 AR,包含各种信息,如姓名、工作、地址、银行账户、宗教信仰等。但并非所有这些都是所有类型的旅行所必需的,并且它们的不变量根据旅行的类型而有所不同。例如,在旅行类型 A 中,我们不需要乘客的电话号码。在旅行类型 B 中,我们这样做。所以当一个人去创建一个团体去旅行类型 B 时,我将有一个关于乘客 AR 的不变量来获得电话的有效数据。

所以基本上这里有两个挑战:我怎样才能打破这个巨大的 AR 以及我应该如何处理这些条件不变量的执行?如果我在创建组 AR 时在处理程序(应用程序服务)内对乘客 AR 强制执行不变量,可以吗?(此外,乘客 AR 和团体 AR 处于相同的有界上下文中,但它们有可能在未来分离)。

标签: aggregatedomain-driven-designaggregateroot

解决方案


我想说这里的限制不应该是乘客,而是团体。最后,您可以为不同类型的旅行创建带有或不带有电话号码的乘客。应该强制执行实际约束,就像不应该将没有电话的乘客作为组成员添加到该特定组一样。关于实施方面:

public void addPassengerToGroup(PassengerInformation passenger) {
    //original code omitted
    this.assertArgumentTrue(passenger.isPhoneInformationProvided(), "Passenger doesn't have contact information.");

    this.groupMembers().add(passenger); 
}

像这样的一些想法可能会解决您的约束检查问题。

对于类似情况还有一些补充说明: https ://softwareengineering.stackexchange.com/questions/319602/how-to-treat-validation-of-references-between-aggregates


推荐阅读