限界上下文可以拆分为两个词:限界和上下文.

限界:是指一个界限具体的某一个范围. 上下文:个人理解就是语境.

其中:销售子域是核心域商品子域和物流子域为支撑域.在这三个子域中都要和商品打交道.

如果把商品抽象为Product类的话按我们一般的常规思路来说不管是商品销售还是发货我们都可以共用同一个Product类.

在DDD中在商品子域和销售子域中可以共享这个Product对象但在物流子域就有点不适合了.为什么呢?

因为毕竟物流子域关注的是商品的发货处理和物流跟踪.针对发货流程而言我只关心商品的数量、大小、重量等规格而不必了解商品的价格等其他信息.所以说物流子域应该关注的是货物的发货处理而不是商品.

那为什么我们之前的开发思路会共用同一个Product对象呢?

答案很简单:没有进行领域的划分.把整个项目一概而论统一建模导致的结果.

在DDD的思想下当划分子域之后每个子域都对应有各自的上下文.在销售子域和商品子域所在的上下文语境中商品就是商品无二义性.在物流子域的上下文语境中我们也可以说商品的发货处理但这时的商品就特指货物了.确定了真实面目之后我想我们也会不由自主的抽象一个新的Cargo类来处理物流相关的业务.这也是DDD带来的好处让我们更清晰的建模.

限界上下文只是一个统一的命名在我们划分子域后每个子域一般对应一个上下文也可以对应多个上下文.但如果子域对应多个上下文的时候就要考虑一下是不是子域能否继续划分.

命名方式很简单,领域名+上下文. 比如:销售子域对应销售上下文物流子域对应物流上下文.

限界上下文用来为领域提供上下文语境保证在领域之内的一些术语、业务相关对象等(通用语言)有一个确切的含义没有二义性.