深入实践DDD:以DSL驱动复杂软件开发
上QQ阅读APP看书,第一时间看更新

1.4.1 限界上下文

为了开发软件,我们需要分析应用要解决的领域问题的范围,捕获那些重要的概念,给它们明确的定义——通俗地说,一个“说法”(概念)不要指两个“东西”,当然一个“东西”也不要有两个“说法”。我们使用这些概念来构建模型,反映我们对领域的认知。

限界上下文(Bounded Context),顾名思义就是限定了边界的上下文,它定义了每个模型的应用范围。在本书的行文中,经常会把限界上下文简称为“上下文”。

怎么理解“上下文”这个说法?为什么不叫作“子系统”“模块”?

这么说吧,很多词语都可能存在多个含义,它到底是哪个意思,往往需要联系上下文才能判断。比如,当我们说起“Good”这个单词时,它到底是“货物”,还是“好的东西”“好的品质”呢?它到底是名词,还是形容词呢?如果它不是出现在一个上下文中——比如某篇文章的某一段的某个句子中,我们其实无从判断。

限界上下文就是这样的一个上下文、一个边界,在这个边界内,所有重要的术语、词语都有一个明确的解释。你看,上下文这个说法是不是比“子系统”“模块”之类的说法要贴切?

有人可能会提出这样的问题:限界上下文多大才合适,划分上下文有没有什么可以遵循的规则?

划分上下文的规则,无非还是放之四海而皆准的“高内聚,低耦合”,这么说估计大家都会觉得太虚。其实真正让大家感到纠结、不知如何切分的那些东西之间一定有所关联,那就干脆都纳入一个上下文中!与其关注上下文的“大小”,不如关注模型的“质量”——概念完整性有没有被破坏。笔者认为:判断大小是不是合适,要看应用的开发团队能在一个多大的范围内掌控软件的概念完整性,只要开发团队没有问题,那么这个范围就算再大,作为一个上下文来处理都是可以的。