【发布时间】:2015-05-03 09:50:35
【问题描述】:
假设我有一个名为 User 的聚合根,用户可以有多个 Vehicle,Vehicle 实体具有诸如 (suv、truck、sedan 等类型... )。
在这种情况下,如果我想获得sedan 类型的User 车辆,我是否必须设计我的聚合以直接从聚合中获取sedans,如User->getSedans()?
或者我可以得到 UserRepository->getVehiclesOfTypeSedan() 并且聚合只包含 Vehicles 吗?
【问题讨论】:
-
您要问的第一个问题是为什么您的
User聚合有车辆集合。您试图对大型User集群强制执行哪些不变量?您可能会说唯一性,但我们通常可以将该约束留给数据库,因此它不是证明持有集合的不变量。您应该强烈考虑在Vehicule上使用owner,它只引用User的id。然后,获得车辆看起来像vehiculeRepository.ofOwnerAndType(ownerId, VehiculeType.Sedan)。 -
另外,根据您的域,您可能需要重新考虑将聚合根命名为
User。大多数域中通常都有更合适的名称(例如Client)。
标签: php domain-driven-design aggregate ddd-repositories aggregateroot