1、什么是领域驱动设计
1.1 解决复杂问题面临的挑战
- 未使用通用语言:
(1)代码无法表达业务
(2)代码难以阅读和维护
(3)随着时间推移,演变成大泥球 - 组织结构的缺乏
- 大泥球模式:功能扩展变得缓慢
- 缺乏对于问题域的关注:专注领域大于其他一切需要
1.2 DDD如何管理复杂性
- 战略模式:
(1)提炼问题域以揭示重要之处:将大问题提炼成子域,揭示核心域(核心域是编写软件的原因),探寻软件的核心意味着要把重要的精力放在核心领域上。
(2)创建一个模型以解决领域问题:为每个子域创建模型
(3)使用公共语言用于建模协作
(4)将模型与歧义、损坏隔离
(5)理解上下文之间的关系 - 战术模式:
模型构造块 - 问题空间和解空间
(1)将问题域提炼成可管理的子域
(2)揭示子域的关系,加深理解
1.3 DDD的实践和原则
- 专注核心领域
(1)核心域提供竞争优势并产生价值
(2)软件成功的关键因素
(3)是产品的独特卖点 - 通过协作进行学习
(1)与业务专家的协作获得对问题的深刻理解
(2)能够产生大量的知识共享 - 通过探索和实验来创建模型
(1)分析模型和代码模型是一个整体,技术代码模型会通过UL绑定到分析模型
(2)分析模型会导致代码模型发生变化,代码模型的重构也会反应到分析模型中 - 通信
(1)通过UL的沟通使业务和开发对问题域的理解和通信更有效 - 理解模型的适用性
(1)一个组织的不同部分对某个通用术语或概念会有不同的理解,每个模型在其特定的上下文中使用其有效的UL来描述其术语或概念
(2)每个上下文会定义语言的边界
(3)战略模式强制使用语言边界以便让模型可以独立发展 - 让模型持续发展
(1)源代码和问题域之间要进行协同,否则代码将越来越难以维护。
1.4 领域驱动设计的常见误区
可以将DDD看作是一种开发思想体系,是以领域为中心的思维方式
- 误区一:战术模式是DDD的关键
(1)DDD不只是一些实现模式
(2)DDD并不是以代码为中心的 - 误区二:DDD是一套框架
(1)DDD不存在一种必须遵循的固定单一架构样式
(2)分层架构样式并非唯一选项 - 误区三:DDD是一颗灵丹妙药
(1)DDD需要迭代开发方法论以及以业务为导向的开发人员
(2)所有项目都可以从分析实践中获益(例如:提炼问题域),也能从战略模式中获益
(3)并非所有的项目都需要用DDD战术模式来构件领域模型
小结:
- 领域驱动设计是一种开发思想体系
- DDD是模式、原则和实践的结合
- DDD的有两种模式类型。战略模式影响解决方案,战术模式用于实现领域模型
- 将大问题域提炼成子域可以揭示核心领域(价值最大的区域),并非一个系统的所有部分都需要被精心设计,团队需要在核心子域中投入更多时间。
- 建立统一语言,将分析模型和代码模型绑定,以便于开发人员和领域专家协作。
- DDD侧重于将关注点放在以下内容中:核心领域、协作、与领域专家探讨。