领域驱动设计的概念是2003年Evic Evans在《领域驱动设计:软件核心复杂性应对之道》(Domain-Driven Design : Tackling Complexity in the Heart of Software)一书中提出的。它是一种以“领域”模型为核心的软件开发方法。那么什么是“领域”模型呢?通常指的是某类业务应用的“业务”模型,但我认为“业务”的概念是相对,譬如对于底层文件存储来说,数据库系统就是“业务”应用。我理解"领域"实际上是某类专业领域知识,而领域模型则是我们通过软件设计对这些专业知识(用于解决特定问题)的建模(不仅仅是数据结构或对象),包括数据结构,处理逻辑以及与外部的交互等等。
对业务进行抽象建模来解决复杂性并不是一件新鲜事,很早就已经出现了(至少是在七八十年代),因此,我认为本质上,其仍然是“面向对象设计”思想的进一步延伸,而其最大的贡献在于对过去大家使用的不同方法进行了再次“抽象”(统一名词,方法指引等)。
这是经常被大家忽略的一部分内容,但我认为这个才是领域驱动设计思想的核心,通过战略设计我们从顶层对业务进行抽象,“正确”的划分出合理的系统边界,确定核心业务模型。我觉得可以理解为战略设计指导构建了整个系统建设的主干或者说骨架。其中的主要概念如下:
战术层面是主要关注于具体的实现方法,也是在应用开发阶段(丰富骨架的血和肉)我们所主要涉及的,其中一些重要的概念包括: