本文为领域驱动设计系列总结的开篇,主要对领域驱动设计概念做个介绍,本系列领域驱动设计总结主要是在Eric Evans 所编写的《领域驱动设计》 一书的基础上进行归纳和总结。
一 背景
导致软件复杂的原因是什么?目标不清,资源缺乏,官僚主义等都有可能,但真正决定软件复杂性的是设计方法。当复杂性失去控制时,软件就会难以理解和维护,而好的设计则可以为开发复杂特性创造更多机会。设计的一些因素
是技术上的,比如分布式架构,网络,数据库等等,但大多数软件的复杂性不在技术上,而是来自于领域本身、用户的活动或业务。当这种领域的复杂性没有很好地解决时,基础技术的构思再好也无济于事。
成功的设计必须系统的考虑到软件的这个核心方面。所以大多数软件项目中,主要的焦点应是领域和领域逻辑, 复杂的领域设计应该基于模型。
二 什么是领域驱动设计?
2.1 基础概念
先来介绍几个术语概念,我结合书中内容对一些术语做出如下解释:
模型:一个抽象的系统,描述了领域的所选方面,可用于解决与该领域有关的问题。
领域:知识、影响或活动的范围。每个软件都是为了执行用户的某项活动,或是满足用户的某种需求,这些用户应用软件的问题区域就是软件的领域。
领域建模:对一类知识严格的组织且有选择的抽象,出于某种目的概括的反应现实,可以通过图或者代码,文字等表达。会根据领域的作用,而选择具体的领域模型。
所以什么是领域驱动设计?常见的定义是:领域驱动设计是一种通过将实现连接到持续进化的模型来满足复杂需求的软件开发方法。
但这个定义过于抽象,这里我根据本书内容总结下:
领域驱动设计:
领域驱动设计是一种思维方式,也是一组优先任务,它旨在加速那些必须处理复杂领域的软件项目的开发。其实质是通过消化吸收大量知识,最后产生一个反映深层次领域知识并聚焦于关键概念的模型,并以此模型驱动软件设计。
为什么使用领域驱动设计?
软件的核心就是其为用户解决领域相关的问题的能力,而通过领域驱动设计可以很好的实现这种能力。
其中领域驱动设计有两个前提:
- 1. 在大多数软件项目中,主要的焦点应该是领域和领域逻辑。
- 2. 复杂的领域设计应该基于模型。
维基百科上还多了个前提,不过本书中没有专门提到:
- 让技术人员以及领域专家合作,以迭代方式来完善特定领域问题的概念模型。
2.2 模型在领域驱动设计中的作用
领域驱动设计本质还是创建领域模型,并以模型来驱动软件设计,所以这里需要介绍下模型在领域驱动的作用:
- 模型和设计的核心互相影响。模型与实现之间的紧密联系便于后续的维护和开发,我们也可以基于对模型的理解来解释代码。
- 模型是团队所有成员使用的通用语言中枢。由于模型与实现之间的关联,开发人员可以使用该语言来讨论程序,并和专家进行无障碍的沟通。
- 模型是浓缩的知识。模型是团队一致认同的领域知识的组织方式和重要元素的区分方式。透过我们如何选择术语、分解概念以及将概念联系起来。
三 领域驱动设计介绍
本篇是领域驱动设计的初步介绍,后面我将会通过以下几个方面对领域驱动内容进行总结和概括:
- 1. 如何运用模型
- 2. 如何构造领域模型
- 3. 如何发觉深层次模型
- 4. 如何设计大型系统