我需要一些关于在DDD中管理实体标识符的说明。
假设我们有Product
模型。它在Sales context
,Shipping context
和Inventory context
中可能有不同的含义。因此,根据DDD,我们可以为每个上下文使用不同的模型。
假设我使用Guid
作为实体的标识符。当我创建一个带有Guid
的产品时,它应该在其他两个上下文中使用相同的GUID创建示例吗?或者我们应该在每个上下文中使用不同的Guid
?
如果我们要在不同的上下文中使用不同的ID,我们如何知道Shipping context
中的哪个产品与Sales context
中的产品相关?由于我们在每个上下文中使用不同的ID,那么在不同的上下文中如何识别相同的产品?
1条答案
按热度按时间2wnc66cl1#
你应该在你所有的有界上下文中共享这个ID。无论是它们的PK还是一些跟踪字段。(最好使用PK)。
如果我们这样做,那么我们就为有界上下文引入了耦合,不是吗?
是的,但并不是所有的耦合都是不好的,相反,有些耦合是必要的。但是你必须知道
product
的生命周期。谁创建,修改和删除它?product
上的任何更改都会影响每个有界上下文吗?对生命周期有一个清晰的愿景,否则,你会陷入一个糟糕的混乱。**注意:**如果修改
product
对其他有界上下文有副作用,那么我们在所有有界上下文中共享一个状态,因为:总而言之,复制数据降低了耦合度,但使设计更加复杂(保持所有数据都是最新的),并在验证方面带来更多问题(我们是否复制了真理的来源?)。