Domain driven design 有界语境、子域与泛在语言

Domain driven design 有界语境、子域与泛在语言,domain-driven-design,Domain Driven Design,a) 对于包含两个或更多子域的BCs,可能存在概念重叠,甚至更糟的是,相同的概念(由多个子域使用)可能会被每个子域以不同的方式解释/理解 不管怎样,如果BC确实包含许多子域,它应该提供几种普遍存在的语言,每个子域一种语言,还是所有子域共享同一种普遍存在的语言 b) 我假设当一个子域跨越多个BC时,这些BC中的每一个都应该定义自己的泛在语言 谢谢a)尽管每个域和子域可能都有自己的语言,但UL专门针对BC。BC根据已经建立的域语言尽可能多地对域和barrows进行建模。它之所以被称为泛在,是因为工程

a) 对于包含两个或更多子域的BCs,可能存在概念重叠,甚至更糟的是,相同的概念(由多个子域使用)可能会被每个子域以不同的方式解释/理解

不管怎样,如果BC确实包含许多子域,它应该提供几种普遍存在的语言,每个子域一种语言,还是所有子域共享同一种普遍存在的语言

b) 我假设当一个子域跨越多个BC时,这些BC中的每一个都应该定义自己的泛在语言

谢谢

a)尽管每个域和子域可能都有自己的语言,但UL专门针对BC。BC根据已经建立的域语言尽可能多地对域和barrows进行建模。它之所以被称为泛在,是因为工程师和领域专家普遍使用它,不幸的是,对于领域语言本身来说,这往往是不可能的

B) 每个BC都应该有自己的UL


当BC模型具有多于一个(子)域的重叠概念时,考虑分割BC是明智的。共享内核可用于消除两个(子)域中概念相同的重叠。

UL的目标是BC。因此,如果BC和子域之间存在1-1映射,那么每个子域都将有自己的UL。如果一个BC包含几个子域,那么,是的,UL也是共享的。问这个问题很有趣,因为无处不在确实意味着到处都是相同的,但是的,UL是每个BC@Asher:很抱歉,我没有及时回复,但我没有注意到您的回答子域是问题空间,而有界上下文是解决方案空间,但在一般情况下,它们应该是1:1。对于遗留代码,每个子域有多个有界上下文是可以的,但不是相反的-一个有界上下文不应该覆盖多个子域。我觉得每个BC有一个实体有点过分了。您可以在一个BC中完全拥有多个聚合根(AG)。每个聚合中都可以很容易地包含实体(而不是AG)作为字段。我同意Tony的观点。业务连续性根本不是由其实体的数量来定义的,而是由其责任和定义来定义的。在这方面,《蓝皮书》当然也没有过时。@MattDavey你把
聚合根
有界上下文
搞混了。这些完全不一样!有界上下文不应覆盖多个子域。