首页 > 解决方案 > 这个聚合体可以分解成更小的聚合体吗?

问题描述

合同有一个位置列表和一个索赔列表

业务规则:每个索赔都需要合同中的位置,但每个位置只能有一个索赔。此外,只要不在索赔中使用位置,就可以在合同中添加/删除/重命名位置。

class Contract {
   Guid ContractId;
   List<Location> Locations;
   List<Claim> Claims;
}

class Location {
   Location Location;
}

class Claim {
   Guid ClaimId;
   Location Location;
}

在这种情况下,索赔可以单独汇总吗?

我的团队正在尝试将其拆分为微服务,即。合同服务,索赔服务。但由于最终的一致性,我看不出这怎么可能奏效!并发用户可能同时编辑不同的声明并在合同中选择相同的位置或添加/删除/重命名位置。

标签: domain-driven-designmicroservices

解决方案


在 DDD 中,聚合是一致性边界。因此,聚合将始终保持一致。换句话说,围绕单个聚合的业务不变量将始终保持一致(在任何事务之前和之后)。

围绕多个聚合的业务不变量也不会始终保持一致。它们最终会变得一致。

在这种情况下,索赔可以单独汇总吗?

您可以将索赔作为一个汇总。没有什么能阻止你这样做。问题是,将索赔作为一个整体是否有益。更大的问题是 ClaimService 是否应该是一个单独的上下文。

您拥有跨服务的规则。这使得难以实施这些业务规则。除非声明、位置和合同的复杂性很大,否则我不会将其作为单独的有界上下文。


推荐阅读