Domain driven design 这种骨料可以分解成更小的骨料吗?

Domain driven design 这种骨料可以分解成更小的骨料吗?,domain-driven-design,microservices,Domain Driven Design,Microservices,合同有一份地点清单和一份索赔清单 业务规则:每个索赔都需要合同中的一个地点,但每个地点只能有一个索赔。此外,只要未在索赔中使用位置,则可以在合同中添加/删除/重命名位置 class Contract { Guid ContractId; List<Location> Locations; List<Claim> Claims; } class Location { Location Location; } class Claim { Gu

合同有一份地点清单和一份索赔清单

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

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

class Location {
   Location Location;
}

class Claim {
   Guid ClaimId;
   Location Location;
}
类合同{
心脏收缩;
列出地点;
列出索偿要求;
}
类位置{
位置;
}
类别索赔{
Guid-ClaimId;
位置;
}
在这种情况下,索赔本身是否可以是一个集合?


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

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


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

在这种情况下,索赔本身是否可以是一个集合

您可以将索赔作为一个集合。没有什么能阻止你那样做。问题是,将索赔作为一个整体是否有利。更大的问题是,索赔服务是否应该是一个独立的上下文


您拥有跨服务的规则。这使得实现这些业务规则变得困难。除非索赔、地点和合同的复杂性很大,否则我不会将其作为单独的有界上下文。

Kimarappan感谢您的回复!我仍然不确定索赔本身如何成为一个集合,因为为了验证它自己,它需要了解该合同中的所有其他索赔,并了解合同中的位置。从我的观点来看,合同是聚合根,只有聚合根才能保证整个聚合的正确性。如果索赔、地点和合同的复杂性不太大,我会同意您在评论中提出的设计。“围绕多个聚合的业务不变量也不会始终保持一致。你是说最终的一致性意味着“最终的正确”吗"? 即使是这样,我也不知道在这种情况下,聚合将如何回到有效状态。成像2个用户,两个用户都试图保存针对同一位置的2个索赔。可能两次编辑都会成功,因为验证将基于过时的数据(最终一致性)。是的,最终一致性意味着最终变得一致。当用户针对位置保存声明时,我们可以通知用户请求已“接受”然后跨服务处理业务规则,然后将请求的状态移动到“已确认”。这将增加复杂性。问题是你是否想购买增加的复杂性