Pau*_*l H 5 architecture domain-driven-design master-data-management bounded-contexts
我对 DDD 的概念相对较新,并且发现有很多示例解释了如何为相对简单的场景定义有界上下文,但似乎没有涵盖的一个领域是主数据和参考数据。
我指的参考数据类型包括货币代码、国家/地区代码和计量单位,它们将用于确保仅使用有效值。
我所指的主数据类型是诸如客户和产品之类的实体,其中不需要不同的有界上下文具有自己的实体视角。我知道在某些情况下,发票有界上下文中的客户实体与运输有界上下文中的客户实体不同,但出于此问题的目的,我们可以假设发票和运输都需要完全相同的客户数据。
我的问题是,在具有多个有界上下文(例如 ERP 系统)的应用程序中,主数据和参考数据是否应该在公共有界上下文中定义,或者这些实体是否应该在每个有界上下文中重复,即使它们包含完全相同的数据?
在各种 DDD 书籍中,拥有域模型的共享子集称为Shared Kernel. 共享域模型的主要问题是,如果两个或更多软件团队(每个团队在不同的有界上下文上工作)想要更新共享内核中的任何内容,他们必须与其他团队就更改的副作用达成一致。它还会使用来自其他限界上下文的术语和人工制品污染其他限界上下文。
例如,如果发票团队希望LoyaltyDiscountPercentage向其Customer实体添加属性,则共享此域实体的其他团队将必须接受与他们自己的有界上下文无关的此属性。该Customer实体很快就会从许多单独的有界上下文中获取人工制品,并且无法在任何单个上下文中描述客户。