当一个概念在有界上下文中建模为根实体并在另一个有界上下文中作为子实体(两个 BC 中的相同身份)建模时,是否有任何缺点?
来自 Eric Evans DDD:
根以外的实体具有本地标识,但它只需要在聚合中是唯一的,因为没有任何外部对象可以在根实体的上下文之外看到它。
即使它扮演子实体的角色,这个概念也将具有全球身份。我认为埃文的观点是避免在其聚合之外修改子实体,但在另一个 BC 中不会违反不变量。你怎么看?
当一个概念在有界上下文中建模为根实体并在另一个有界上下文中作为子实体(两个 BC 中的相同身份)建模时,是否有任何缺点?
来自 Eric Evans DDD:
根以外的实体具有本地标识,但它只需要在聚合中是唯一的,因为没有任何外部对象可以在根实体的上下文之外看到它。
即使它扮演子实体的角色,这个概念也将具有全球身份。我认为埃文的观点是避免在其聚合之外修改子实体,但在另一个 BC 中不会违反不变量。你怎么看?
在这里使用全局 id 非常好。我认为 Eric 的意思是 id至少在其父聚合中应该是唯一的。
我在我们工作的系统中有很多类似的案例,而这正是我们设计它的方式。
这可以; “子实体”是“根实体”上下文中的不可变值对象。换句话说,根实体可以引用子实体,但不能改变它们的属性。
在我看来,缺点是共享实体时有界上下文之间的概念泄漏。
起初,就防止重复而言,这似乎是一个好主意,但是您稍后会为此付出代价。我可以看到一种情况,其中一种情况下的变化是有意义的,但在另一种情况下却没有。