学习课程名称:DDD(领域驱动模型)思想解读及落地指南
章节名称:第二章 战略设计(2-6,2-7)
讲师姓名:尤达_技术咖啡
课程内容:
2-6、领域划分与子域
1.什么是领域?什么是领域划分?什么是子域?
领域是某个组织所在的事情,已经所包含的一切
领域划分是以分离关注点为原则对问题空间的划分,意思是将复杂的大问题划分为不同的小的问题空间,对于某个小的问题空间,我们只关注此问题空间的事情,以达到简化复杂问题的目的。
子域是领域中某个方面的问题和解决它所涉及的一切,即对领域进行领域划分所得到的某个方面的问题域。
2.为什么进行领域划分?
传统的开发模式是以需求为粒度分给开发者,如
缺点:
(1)问题点和领域知识重叠,比如售卖扫码支付购物和柜门机免密购物他们会面临相同的问题点和领域知识
(2)模型重叠,比如售卖扫码支付购物和柜门机免密购物他们会提炼出重合的概念,产出相同的模型
领域划分如何解决了传统模式的问题?进行领域划分,产生子域,不同的子域聚焦于不同的问题
3.如何进行领域划分?有什么指导方法论?使用基于故事分解的领域划分
(1)对于使用领域故事分析法得到的粗略的领域图进行继续拆解,如果是无法继续拆解的不需要再拆解,如果能继续拆解的,则继续拆解,直到不能继续拆解。
比如:图中02展示支付二维码环节,是如何能展示出二维码的?可以继续拆解
继续分解后:
(2)全部进行分解之后,得到细化的领域故事树状图:
每一条是一个或大或小的需要我们建模去解决的领域问题
(3)然后我们按照关注点进行聚类,聚类之后得到每一个域要完成的职责,即解决的领域问题,并得到领域之间的依赖关系
2-7、确定系统核心部分: 核心域和精炼
1.子域的分类
子域分为核心域、通用子域、支持子域
核心域:是当前组织最核心的部分,通常跟当前组织的业务领域和经营方式有关。
通用子域:是具有通用性的子域。
支撑子域:如果一个子域不是核心域,并且也没有通用性,则是支撑子域。
我们只需要识别并区分核心域即可,如果非要区分一个子域是通用子域还是支撑子域,意义不大。
2.为什么要识别核心域?
是为了聚焦,聚焦研发资源,要把更多的人力、更好的资源投入到核心域
3.如何识别核心域?精炼
精炼就是将领域进行不断的细化和提炼,分析出领域中普通的部分和核心的部分
精炼的方式有两种:萃取和分离
萃取是聚焦核心的部分,将核心的部分提取出来。
分离是聚焦核心的部分,将对核心影响不大的部分分离出去。
案例过程中的精炼过程:
案例中的核心域:
学习心得:
(1)领域划分是通过分离关注点的方式解决复杂问题
(2)应该通过领域划分出的问题域进行任务分配,而非需求
(3)将故事进行更细化的分解是领域划分的一种方法
(4)我们做完领域划分之后,要进行识别核心域
(5)识别核心域的目的是做好开发资源聚焦