DDD 中主数据和参考数据的限界上下文
Bounded Context for Master and Reference Data in DDD
我对 DDD 的概念比较陌生,发现有很多示例可以解释如何为相对简单的场景定义限界上下文,但似乎没有涵盖的一个领域是主数据和参考数据。
我指的参考数据类型包括货币代码、国家/地区代码和计量单位,它们将用于确保仅使用有效值。
我指的主数据类型是客户和产品等实体,其中不需要不同的限界上下文对实体有自己的看法。我知道在某些情况下,发票有界上下文中的客户实体与运输有界上下文中的客户实体不同,但出于这个问题的目的,我们可以假设发票和运输都需要完全相同的客户数据。
我的问题是在具有多个限界上下文的应用程序(例如 ERP 系统)中是否应该在公共限界上下文中定义主数据和参考数据,或者是否应该在每个限界上下文中复制这些实体,即使它们会包含完全相同的数据?
在各种 DDD 书籍中,拥有域模型的共享子集称为 Shared Kernel
。共享域模型的主要问题是,如果 2 个或多个软件团队,每个团队都在不同的限界上下文中工作,想要更新共享内核中的任何内容,他们必须与其他团队就更改的副作用达成一致。它还会用其他有界上下文中的术语和人工制品污染其他有界上下文。
例如,如果发票团队希望将 LoyaltyDiscountPercentage
属性 添加到他们的 Customer
实体中,共享该域实体的其他团队将必须接受此 属性 与他们自己的限界上下文无关。 Customer
实体很快就会从许多单独的有界上下文中提取人工制品,并且无法在任何单个上下文中描述客户。
参考数据可以是 persisted/accessed 通过 REST API。此 API 负责保护和保存数据。 api 将参考数据转换为用于混合域模型的对象图(双向)。每个客户 BC 一张图。一个好的身份验证策略应该有所帮助。如果一个团队需要新的东西,现在只需要添加或修改它的图表,而不会给其他团队带来风险。一个好的版本控制策略应该有所帮助。推送到 API 的更新应该是同步的和事务性的。如果可以避免,读取操作不能避免。
我对 DDD 的概念比较陌生,发现有很多示例可以解释如何为相对简单的场景定义限界上下文,但似乎没有涵盖的一个领域是主数据和参考数据。
我指的参考数据类型包括货币代码、国家/地区代码和计量单位,它们将用于确保仅使用有效值。
我指的主数据类型是客户和产品等实体,其中不需要不同的限界上下文对实体有自己的看法。我知道在某些情况下,发票有界上下文中的客户实体与运输有界上下文中的客户实体不同,但出于这个问题的目的,我们可以假设发票和运输都需要完全相同的客户数据。
我的问题是在具有多个限界上下文的应用程序(例如 ERP 系统)中是否应该在公共限界上下文中定义主数据和参考数据,或者是否应该在每个限界上下文中复制这些实体,即使它们会包含完全相同的数据?
在各种 DDD 书籍中,拥有域模型的共享子集称为 Shared Kernel
。共享域模型的主要问题是,如果 2 个或多个软件团队,每个团队都在不同的限界上下文中工作,想要更新共享内核中的任何内容,他们必须与其他团队就更改的副作用达成一致。它还会用其他有界上下文中的术语和人工制品污染其他有界上下文。
例如,如果发票团队希望将 LoyaltyDiscountPercentage
属性 添加到他们的 Customer
实体中,共享该域实体的其他团队将必须接受此 属性 与他们自己的限界上下文无关。 Customer
实体很快就会从许多单独的有界上下文中提取人工制品,并且无法在任何单个上下文中描述客户。
参考数据可以是 persisted/accessed 通过 REST API。此 API 负责保护和保存数据。 api 将参考数据转换为用于混合域模型的对象图(双向)。每个客户 BC 一张图。一个好的身份验证策略应该有所帮助。如果一个团队需要新的东西,现在只需要添加或修改它的图表,而不会给其他团队带来风险。一个好的版本控制策略应该有所帮助。推送到 API 的更新应该是同步的和事务性的。如果可以避免,读取操作不能避免。