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

x7yiwoj4  于 12个月前  发布在  .NET
关注(0)|答案(1)|浏览(108)

我需要一些关于在DDD中管理实体标识符的说明。
假设我们有Product模型。它在Sales contextShipping contextInventory context中可能有不同的含义。因此,根据DDD,我们可以为每个上下文使用不同的模型。
假设我使用Guid作为实体的标识符。当我创建一个带有Guid的产品时,它应该在其他两个上下文中使用相同的GUID创建示例吗?或者我们应该在每个上下文中使用不同的Guid
如果我们要在不同的上下文中使用不同的ID,我们如何知道Shipping context中的哪个产品与Sales context中的产品相关?由于我们在每个上下文中使用不同的ID,那么在不同的上下文中如何识别相同的产品?

2wnc66cl

2wnc66cl1#

你应该在你所有的有界上下文中共享这个ID。无论是它们的PK还是一些跟踪字段。(最好使用PK)。
如果我们这样做,那么我们就为有界上下文引入了耦合,不是吗?
是的,但并不是所有的耦合都是不好的,相反,有些耦合是必要的。但是你必须知道product的生命周期。谁创建,修改和删除它?product上的任何更改都会影响每个有界上下文吗?对生命周期有一个清晰的愿景,否则,你会陷入一个糟糕的混乱。

**注意:**如果修改product对其他有界上下文有副作用,那么我们在所有有界上下文中共享一个状态,因为:

  • 我们不想依赖于其他有界上下文数据(避免成为一个下游有界上下文)。您应该意识到,如果这些数据不经常更改,那么复制数据将是很好的。因此,当它更改得太频繁时,最终的一致性可能对验证来说是一个挑战。
  • 我们没有定义正确的边界,最终以错误的方式复制数据。

总而言之,复制数据降低了耦合度,但使设计更加复杂(保持所有数据都是最新的),并在验证方面带来更多问题(我们是否复制了真理的来源?)。

相关问题