Domain driven design 跨有界上下文的实体建模

Domain driven design 跨有界上下文的实体建模,domain-driven-design,bounded-contexts,Domain Driven Design,Bounded Contexts,当一个概念在有界上下文中被建模为根实体,而在另一个有界上下文中被建模为子实体(在两个BC中的标识相同)时,是否存在任何缺陷 来自Eric Evans DDD: 根以外的实体具有本地标识,但它只需要 在聚合中是唯一的,因为没有外部对象可以看到 它脱离了根实体的上下文 即使在扮演子实体的角色时,该概念也将具有全局特性。 我认为Evan的观点是避免修改聚合之外的子实体,但在另一个BC中,不会违反不变量。 你觉得怎么样?在这里使用全局id是非常好的。我认为Eric的意思是id应该是唯一的,至少在其父聚合

当一个概念在有界上下文中被建模为根实体,而在另一个有界上下文中被建模为子实体(在两个BC中的标识相同)时,是否存在任何缺陷

来自Eric Evans DDD:

根以外的实体具有本地标识,但它只需要 在聚合中是唯一的,因为没有外部对象可以看到 它脱离了根实体的上下文

即使在扮演子实体的角色时,该概念也将具有全局特性。 我认为Evan的观点是避免修改聚合之外的子实体,但在另一个BC中,不会违反不变量。
你觉得怎么样?

在这里使用全局id是非常好的。我认为Eric的意思是id应该是唯一的,至少在其父聚合中是唯一的


在我们工作的系统中,我有很多类似的案例,这正是我们设计它的方式。

在我看来,缺点是共享实体时有界上下文之间的概念泄漏


起初,从防止重复的角度来看,这似乎是一个好主意,但你以后会为此付出代价。我可以看到一个场景,其中一个上下文中的更改有意义,但另一个上下文中的更改没有意义。

这很好;“子实体”是“根实体”上下文中的不可变值对象。换句话说,根实体可以引用子实体,但不能更改其属性。

不是为了防止重复,而是相反。实体根据有界上下文(不同的模型,只是共享标识)发挥作用。考虑到这一点,一个BC可以要求实体与另一个实体保持一致,而另一个BC则不需要。