我仍然围绕着DDD,我遇到的一个绊脚石是如何处理不同聚合之间的关联.假设我有一个聚合封装客户和另一个封装货件.
出于商业原因,出货是他们自己的聚合,但他们需要明确地绑定到客户.我的客户域实体是否应该有发货清单?如果是这样,我如何在存储库级别填充此列表 - 假设我有一个CustomerRepository和一个ShipmentRepository(每个聚合一个repo)?
我说'关联'而不是'关系',因为我想强调这是一个领域决策,而不是基础设施 - 我首先从模型设计系统.
编辑:我知道我不需要将表直接建模到对象 - 这就是我首先设计模型的原因.在这一点上,我根本不关心数据库 - 只是这两个聚合之间的关联.
您的ShipmentRepository无法将客户数据汇总到您的货件模型中.存储库不必与表进行1对1映射.
我有几个存储库,它们将多个表组合成一个域模型.
我认为回答这个问题有两个层次.在一个层面上,问题是如何填充客户和货件之间的关系.我非常喜欢"填充"语义,您的货件存储库可以有一个fillOrders(List customers,....).
另一个层次是"我如何处理作为DDD一部分的非规范化域模型".而"客户"可能是他们所有人中最好的例子,因为它只是出现在很多不同的背景中; 几乎所有流程都有客户,客户的背景通常非常多样化.最多只有一半时间你对"订单"感兴趣.如果我在开始时对域名的理解是完美的,那么我永远不会制定客户域名概念.但事实并非如此,所以我总是最终制作Customer对象.我还记得3年后我认为能够制作出正确的"客户"领域模型的项目.我愿意寻找代表客户的替代和更详细的概念; PotentialCustomer,OrderingCustomer,CustomerWithOrders以及其他一些人; 对不起,名字不是更好.我还需要更多的时间;)