Preface 前言
为什么要写这本书
对软件开发而言,如何将业务问题转变为系统解决方案一直是困扰开发工程师和架构师的一大难题。针对这个难题诞生了一批系统建模的方法论,其中领域驱动设计(Domain Driven Design,DDD)无疑是当下最热门的建模方法。随着微服务架构的盛行,DDD成了构建微服务系统的主流设计思想和模式。另外,DDD是一种比较复杂的建模方式,包含了一系列不易理解的核心概念。想要在现实开发过程中实现这些核心概念,就需要引入专门的开发框架和工程实践。
本书专注于DDD实战,采用对应的开发框架和工程实践对如何实现DDD展开详细的讨论,涵盖限界上下文、聚合、实体、值对象、应用服务、资源库、领域事件等核心概念。在开发框架上,本书将基于Java领域最常用的Spring Boot、Spring Cloud框架以及专用于DDD领域的Axon框架来构建面向领域的系统,并且会在实现过程中引入CQRS、事件溯源等一系列工程实践。在案例实现上,本书将从零开始构建一个完整的系统。关于案例的介绍会逐层递进,后一章将在前一章的基础上添加新的DDD概念和实现方式,过程中还会穿插对Spring和Axon框架的介绍,确保读者能够把握案例实现的每一个步骤和细节。
读者对象
❑系统架构师和后端开发人员。这部分读者希望在工作中引入或者更好地利用DDD来提升自己的系统建模和架构能力。本书作为一本体系化的DDD实战类图书,能够为这些读者提供全面、完整的技术体系和实践技巧。
❑对DDD感兴趣的开发人员。这部分读者希望掌握一些优秀的架构设计方法来构建自己的知识体系,而DDD目前非常热门,是一个很好的选择。DDD在微服务架构设计领域得到了广泛的应用,其设计理念大多具备通用性。
❑广大高校学生。这部分读者希望系统学习一些软件开发的知识,为后续的深造和工作打好基础。
本书特色
与市面上相关书籍相比,本书从案例实战的角度切入,更具体系化,主要体现在如下3个方面。
1)对于DDD中的各个核心概念,本书将通过一个完整的案例来阐述其落地方式。无论限界上下文、聚合、实体、值对象,还是领域事件和应用服务,都会一一对应到案例中的业务场景,并有详细的系统建模的实现过程。
2)本书对DDD实现技术和开发框架进行了系统梳理,并综合使用Spring Boot、Spring Cloud及Axon等框架来实现DDD中的核心概念,例如使用Spring Cloud Stream来实现领域事件,使用Axon框架来实现事件溯源等。在Java领域中,这些技术体系非常适合实现DDD的开发需求。
3)对于各项技术组件,本书会把它们都应用到具体的案例开发过程中。案例实现部分的内容并不是平铺直叙的,而是采用一种递进的方式来呈现。本书将从限界上下文开始,逐步给出DDD各个核心概念的实现步骤和详细代码,这些代码都可以直接应用于日常开发中。
如何阅读本书
本书分为13章,基于领域驱动设计实现了一个完整案例,让读者全面掌握基于DDD的技术背景、技术体系及具体实现。
第1章总体介绍领域驱动设计这套主流的系统建模方法,包括面向领域的设计思想、设计方法以及应用方式。
第2章以理论为主,阐述DDD核心概念,包括子域、限界上下文、聚合、实体、值对象、领域事件、应用服务、资源库等。
第3章基于健康医疗领域中常见的健康检测场景,设计HealthMonitor案例系统,引入DDD的核心概念,对HealthMonitor系统进行系统建模。
第4章梳理DDD的具体实现技术及实现模型,涉及Spring Boot、Spring Cloud等框架的应用,并介绍专门面向DDD的Axon框架。
第5章系统地阐述限界上下文的代码组织形式,并通过Spring Boot应用程序创建HealthMonitor案例系统中的各个限界上下文。
第6章阐述聚合、实体和值对象这三大类领域模型对象的创建方式,并实现HealthMonitor领域模型对象。
第7章引入命令服务和查询服务这两大类应用服务,并阐述其实现策略,完成聚合和应用服务之间的整合。
第8章引入Repository架构模式和Spring Data JPA框架,整合资源库和应用服务,并实现HealthMonitor资源库。
第9章对领域事件模型进行抽象,基于AbstractAggregateRoot和@TransactionalEventListener实现单个限界上下文中的领域事件发布,基于Spring Cloud Stream实现跨限界上下文的领域事件的消费。
第10章通过Spring Boot框架完成HealthMonitor案例系统中基于REST API的限界上下文集成,并在此基础上引入Spring Cloud来简化限界上下文集成的过程。
第11章详细介绍CQRS架构模式及事件溯源机制,引入Axon框架完成领域模型组件和分派模型组件的设计及实现,并最终完成对HealthMonitor案例系统的重构。
第12章分析DDD测试方法和类型,引入Spring Boot中的测试解决方案,然后基于这些解决方案完成对HealthMonitor案例系统中领域对象、应用服务、资源库及接口的测试。
第13章关注工程实践,对实现DDD的各种架构风格展开讨论,并梳理DDD应用程序的实施前提、DDD实施与现有系统之间的关系,以及DDD与微服务的整合。
其中,第5章到第12章构成了一个完整的实战案例,其中穿插着对Spring Boot、Spring Cloud和Axon等主流开源框架的介绍。这部分内容是全书重点,逐层递进,形成如下4个构建阶段。
❑第一阶段通过聚合、应用服务和资源库构建案例系统。
❑第二阶段通过领域事件和限界上下文集成完成案例系统。
❑第三阶段基于CQRS和事件溯源重构案例系统。
❑第四阶段基于测试类型和注解测试案例系统。
通过这部分内容的学习,读者可以从零开始构建一个完整的DDD系统。
在写作方式上,本书合理组织案例实现的过程,并详细介绍对应开发框架和工具的应用方式。整体上按照“业务案例分析→技术体系概述→实现过程详解→实践方法总结”的顺序来讲解,各章之间呈递进关系。
勘误和支持
本书尽管是笔者认真写就的,但难免会存在一些错误或者不准确的地方,恳请各位读者批评指正。如果读者朋友有更多宝贵意见,也欢迎来信交流。联系邮箱为tianyalan25@163.com。真诚期待你的反馈。本书的全部源文件可以从笔者的GitHub下载:https://github.com/tianminzheng。
致谢
感谢我的家人,特别是我的妻子章兰婷女士,他们在我忙于写书的时候给予我极大的支持和理解。感谢以往及现在公司的同事们,身处在业界领先的公司和团队中,我得到了很多学习和成长的机会,没有大家平时的帮助,不可能有这本书的诞生。
郑天民
2022年7月于杭州钱江世纪城