对有限的上下文和子域感到困惑


74

我已经读过Eric Evan的书,现在正在读Vaughn Vernon的书。我在第二章中,他谈论子域和有限的上下文,现在被彻底弄糊涂了。

从我的提炼中,BC和SD之间应该存在1:1的关系。但是,我在其他地方读到,不一定是这种情况。

有人可以向我解释BC和SD之间的关系吗?


也许解释BC和SD之间的区别会有所帮助
克里斯

Answers:


58

子域是您业务的一部分。有核心域,支持域和通用域。核心域名就是金钱所在,支持域名可以支持您的核心业务,而通用域名是您需要的,但并不在乎,因此您可能会直接购买。对于保险公司而言,核心领域是保险,支持领域可以是客户产品组合,而一般领域可以是时间表。

通常,有界上下文是普遍语言在其中保持一致的边界。在DDD walhalla中,每个子域都将生活在其自己的有界上下文中。但是实际上,存在着很多遗留物,有些软件包试图一次完成所有事情……这将迫使各种尴尬的关系。


如果子域将生活在其自己的有界上下文中,则意味着有界上下文比该子域更宽。但是从我从沃恩·弗农(Vaughn Vernon)的书中获得的信息来看,在一个子域中,您可以具有多个绑定的上下文。因此,也许每个BC都将生活在其SD中可能更为正确。我错了吗?
acejazz

44

我试图以我的理解来解释这些概念。

在DDD中,所有内容都应使用通用语言进行交流,以便技术团队和业务团队可以使用相同的术语并对问题有相同的看法

  • DDD中的代表业务中的实际问题。如:电子商务是一个域,工资系统是一个域
  • 域分为许多子域,因此每个子域都关注较小的问题。例如:电子商务具有许多子域,例如:购物车,计费,产品目录,客户信息...
  • 每个子域都应有明确的职责,因此有一个限制其功能的边界,该边界将帮助子域仅专注于做一件事情并做好。该边界被视为子域的有界上下文。有界上下文将定义:
    • 子域需要多少个域模型?
    • 每个模型需要哪些属性?
    • 子域需要哪些功能?

例如:“购物车”子域需要模型:购物车,产品,客户信息...,并包含在购物车上执行CRUD的功能。注意:Shopping Cart子域中的Product和Customer模型可能与Product Catalogs和Customer Profiles子域中的模型不同,它们仅包含要显示在Shopping Cart上的必要属性。


7

沃恩·弗农(Vaughn Vernon)在他的“实施领域驱动的设计”一书中指出,“子域生活在问题空间中,而解决方案空间中的边界上下文则存在”

想象一下正在开发的一种支持牙医的软件。牙医有两个问题:固定病人的牙齿和预约病人。固执己见是核心领域,任命是一个支持子领域。在核心领域,医务人员关心患者的牙科病史,是否可以进行全身麻醉,当前问题是什么,等等。在子领域中,医务人员(不一定是医务人员)关心患者的联系方式,日期以及最适合医生和患者的时间,所需的牙科工作的类型等。这两个领域都需要一个患者模型,但是该模型将取决于我们为确保正确信息和正确定位而使用的有限上下文。解决每个领域的问题时,可用的功能。读https://robertbasic.com/blog/bounded-contexts-and-subdomains/


6

5
很好,但是如果您从文章中复制答案的答案,那将是很棒的!
Sameh Deabes 2014年

6
以下是第二篇文章的摘要:子域界定了一个域并存在于问题空间内。有界上下文界定了域模型并存在于解决方案空间内。理想的情况是在子域和有界上下文之间完全对齐,但是实际上在这方面必须接受一定程度的灵活性。
Sameh Deabes 2014年

1
不赞成gorodinksi链接,因为他在技术上讲得太多,而在业务上讲得还不够。@JefClaes的答案要好得多。
Shane Courtrille 2016年

第一个链接似乎已断开
hannojg

2

请检查一下链接,它将对您有帮助,绑定上下文还是上下文?术语“上下文”是对概念分组的一般描述,术语“绑定的上下文”更具体-绑定的上下文是您的应用程序中具有明确定义边界,具有自己的模型并维护自己的代码的区域。在受限上下文中,所有内容都应严格一致。

通常,我们可以互换使用术语“上下文”和“绑定的上下文”,尽管我倾向于在上下文方面谈论事物的业务方面,在术语“绑定的上下文”方面谈论技术实现。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.