DDD领域分析是一种对现实业务进行建模分析的一种方法,它对业务问题做了分类,分层与抽象,为后面代码的编写理清了思路。
如何理解DDD呢?首先DDD中有许多名称,我这里一一列举出来:领域,子域,核心域,通用域,支撑域,有界上下文,聚合,聚合根,实体,值对象等。
主要两个概概念,边界感和范围
那么如何去理解这些名词呢?
打个比方,现在要对一颗树进行分析与建模。
//如何理解领域和子域
- 确定研究对象,即研究领域,这里是一个桃树。
- 对研究对象进行细分。根,茎,叶属于生长类器官。花,果实,种子属于营养类器官。对于DDD领域,根,茎,叶,花,果实,种子等器官是细分后的问题域。这个过程就是DDD将领域细分为多个子域的过程。
- 继续对器官进行细分,比如叶子器官可以分为保护组织,营养组织,和输导组织。这个过程就是将子域进一步划分为多个子域的过程。
- 对组织进行细分,将组织细分为细胞,细胞成为我们研究的最小单元。细胞之间的细胞壁确定了单元的边界,也确定了研究范围的最小边界。
细胞核,线粒体,细胞膜等物质共同构建细胞,这些物质一起协作让细胞具有这类细胞的特定的生物功能,这里的细胞就被定义为DDD的聚合。细胞内的物质就可以理解为聚合中的聚合根,实体以及值对象等。在聚合内这些实体一起协作完成特定的业务功能。这个过程类似于DDD设计时,确定微服务内功能要素的边界过程。
每一个细分领域都会有一个知识体系,也就是DDD的领域模型,在所有子领域的研究完成后,我们就建议起了全域的知识体系了,也就建立起了全域的领域模型。
//如何理解核心域,通用域和支持域
在领域不断划分的过程中,领域会细分为不同的子域,子域可以根据自身的重要性和功能属性划分为三类子域,即使核心域,通用域和支撑域。
核心域:决定了产品和公司的核心竞争力的子域。他是业务成功的主要因素和公司核心竞争力。没有太多个性化的诉求。
通用域:同时被多个子域所使用的域是通用域。
支撑域:既不包含决定公司产品核心竞争力的功能,也不是通用子域的功能,就是支撑域(其他)
核心域和支撑域的划分是和公司实际的业务相关的,它决定了公司在某个问题上的投入。核心域必然是研究的重点。
商业模式的不同会导致核心域的划分结果不同。有的公司的核心域可能在客户服务。有的公司的核心域可能在产品有的可能在物流。在公司领域细分,建立领域模型和系统建设时候,我们就要结合公司的战略重点和商业模式,找到核心域且重点关注核心域。
总结:
领域的核心就是将问题域逐级细分,来降低业务理解和系统实现的复杂度。通过领域细分,逐步缩小微服务需要解决的问题域,构建合适的领域模型。而领域模型映射成的系统就是微服务了。