如何在 DDD 中管理有界上下文之间的实体标识符?

问题描述 投票:0回答:1

我需要一些有关管理 DDD 中实体标识符的说明。

假设我们有

Product
模型。它在
Sales context
Shipping context
Inventory context
中可以有不同的含义。所以我们可以根据 DDD 为每个上下文建立不同的模型。

假设我使用

Guid
作为实体的标识符。当我使用
Guid
创建产品时,它是否应该使用相同的 Guid 在其他两个上下文中创建实例?或者我们应该在每种情况下使用不同的
Guid

如果我们要在不同的上下文中使用不同的 ID,我们如何知道

Shipping context
中的哪个产品与
Sales context
中的产品相关?由于我们在每个上下文中使用不同的 ID,如何在不同的上下文之间识别相同的产品?

c# asp.net domain-driven-design bounded-contexts
1个回答
0
投票

您应该在所有限界上下文中共享 ID。无论是他们的PK还是一些追踪领域。 (最好用PK)。

如果我们这样做,那么我们就引入了有界上下文的耦合。不是 是吗?

是的,但并不是所有的耦合都是不好的,相反,有些耦合是必要的。但您必须了解

product
生命周期。谁创建、修改和删除它?
product
上的任何更改是否会影响每个有界上下文?对生命周期有一个清晰的认识,否则,你最终会陷入一团糟。

注意: 如果修改

product
对其他有界上下文有副作用,那么我们在所有有界上下文之间共享一个状态,因为:

  • 我们不想依赖其他有界上下文数据(作为下游有界上下文)。您应该意识到,如果这些数据不那么频繁地更改,那么复制数据会很好。因此,当变化过于频繁时,最终一致性可能会对验证构成挑战。
  • 我们没有定义正确的边界,最终以错误的方式复制数据。

总而言之,复制数据降低了耦合性,但使设计变得更加复杂(使所有数据保持最新),并带来更多验证问题(我们是否复制了事实来源?)。

© www.soinside.com 2019 - 2024. All rights reserved.