如何理解领域、子域和限界上下文
从三个问题开始:
- 什么是领域?
- 什么是子域?
- 什么是限界上下文?
什么是领域?
从广义上来讲,领域是一个组织所做的事情以及其中包含的一切;
这段话的解释应该是,领域是公司或组织所要提供的服务所对应的所有事情,这些事情就是领域;
领域这个词的范围很大,承载太多的含义,领域既可以表示整个系统,也可以标识其中的某个核心域或者支撑子域;在DDD中一个领域被划分为多个子域,领域模型在限界上下文上下文中完成设计/开发;
看一个含有子域和限界上下文的领域模型例子:
最外层中最大的实线表示的就是这个领域驱动模型中的领域,这个领域表示的是一个电子商务系统的领域是由于多个子域和限界上下文组成;
在内层中用虚线划分出来的就是子域,可以看到在电子商务系统的领域下有产品目录子域、订单子域、发票子域、物流子域;
在内层中还可以看到实线划分出来的界限上下文,界限上下文将不同的子域连接在了一起;
从上述的例子中电子商务系统就是一个领域,它表示的是电商公司的核心业务,这样我们可以得出领域即业务的结论;
什么是子域;
从上面的例子中可以看到子域就是更小的范围,子域并不是一定要做的很大,并且包含很多的功能;有些时候,子域可以简单到只包含一套算法,这套算法可能对于业务系统来说非常重要,但是并不包含在这套系统的核心域中;
子域又可以被划分成:核心域、支撑域、通用域三个部分;
核心域是最高优先级、最资深的领域转换和最优秀的开发团队进行主导,在实施DDD的过程中,需要关注核心域;
支撑域通常是用来支撑我们的业务的,虽然对于业务的某些方面重要,但是不是核心;
通用域指的是可以被应用与整个业务系统,类似于基础框架,底层模型;
实施DDD的过程中应该尽量避免将关注点聚焦在实体、值对象之上,这样会导致缺少一种更广阔的视野,会导致不同的核心杂糅在一起,导致他们将两个模型创建成一个;