aggregate - DDD - 大型聚合并在聚合之间强制不变
问题描述
我有点坚持以正确的方式应用领域驱动设计方式来建模这个问题。我想在旅行社建模旅行团。
我们在一个有限的上下文中拥有诸如乘客、组和组成员之类的概念。这名乘客是一个大型 AR,包含各种信息,如姓名、工作、地址、银行账户、宗教信仰等。但并非所有这些都是所有类型的旅行所必需的,并且它们的不变量根据旅行的类型而有所不同。例如,在旅行类型 A 中,我们不需要乘客的电话号码。在旅行类型 B 中,我们这样做。所以当一个人去创建一个团体去旅行类型 B 时,我将有一个关于乘客 AR 的不变量来获得电话的有效数据。
所以基本上这里有两个挑战:我怎样才能打破这个巨大的 AR 以及我应该如何处理这些条件不变量的执行?如果我在创建组 AR 时在处理程序(应用程序服务)内对乘客 AR 强制执行不变量,可以吗?(此外,乘客 AR 和团体 AR 处于相同的有界上下文中,但它们有可能在未来分离)。
解决方案
我想说这里的限制不应该是乘客,而是团体。最后,您可以为不同类型的旅行创建带有或不带有电话号码的乘客。应该强制执行实际约束,就像不应该将没有电话的乘客作为组成员添加到该特定组一样。关于实施方面:
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
推荐阅读
- laravel - 表格中的表单提交按钮没有功能
- ajax - MissingServletRequestParameterException:必需的长参数 prod_id 不存在
- r - 为什么“dnorm”不将一个概率加起来?
- php - 值没有保存到 laravel 中的数据库中
- python - Python:在循环中迭代条件语句
- swift - 如何在 NSTextField 中调整垂直单行字符串?
- node.js - 在猫鼬的每个查找查询中添加(注入)一个条件
- python - Pygame 中的用户定义键
- excel - SUM公式中的CONCATENATE函数
- spring-boot - 带有 Artemis 2.6.3 多播(主题)的 Spring WebSocketMessageBrokerConfigurer 不起作用