书籍详情
《悟道领域驱动设计》[49M]百度网盘|亲测有效|pdf下载
  • 悟道领域驱动设计

  • 出版社:电子工业出版社
  • 作者:覃玉杰 著
  • 出版时间:2024-10-01
  • 热度:5450
  • 上架时间:2025-01-04 08:18:29
  • 价格:0.0
书籍下载
书籍预览
免责声明

本站支持尊重有效期内的版权/著作权,所有的资源均来自于互联网网友分享或网盘资源,一旦发现资源涉及侵权,将立即删除。希望所有用户一同监督并反馈问题,如有侵权请联系站长或发送邮件到ebook666@outlook.com,本站将立马改正

内容介绍

产品特色

内容简介

《悟道领域驱动设计》系统介绍领域驱动设计的理论知识与实践方法,不仅讲解领域驱动设计的战术设计(如实体、值对象、聚合、聚合根、领域服务、领域事件等)、战略设计(如限界上下文、上下文映射、子域等)、领域建模等理论知识,还探讨领域驱动设计的应用架构、类型变化链、一致性、CQRS、事件溯源、编码指南、架构可视化(基于C4模型)等工程实践,探索如何将领域驱动设计与当前业界流行的开发方法(如低代码、敏捷开发、测试驱动开发等)融合,使领域驱动设计成为真正可落地的开发方法。本书在介绍概念时,提供了代码层面的讲解,这样可以极大地降低读者对概念的理解难度。此外,书中还提供两个热门领域的项目案例——基于领域驱动设计开发的视频直播服务和AIGC产品,帮助读者理解、掌握、应用领域驱动设计。

本书适合计算机相关行业的从业人员阅读,包括初级、中级和高级研发者,也适合架构师、技术总监等高级技术管理者阅读。


作者简介

覃玉杰

互联网一线开发者、资深架构师和研发负责人。擅长复杂场景下的业务需求落地,在电商、直播、互联网健康、互联网金融、物流供应链、电子政务等领域拥有丰富的实践经验;设计、重构、维护过多个百万级QPS的P0级服务,多次参加“618”“双11”大促活动,具备丰富的高性能、高并发、高可用系统设计开发经验;多次从0到1组建研发团队,推动研发体系搭建、研发规范制定、团队文化建设、团队成长规划和技术能力培训;热衷技术精进和知识分享,维护多个开源项目,运营微信公众号“悟道领域驱动设计”。


精彩书评

作者基于多年在大厂的实战经验,紧密结合自身实际场景,汲取了之前领域驱动设计理念的精华部分,并将其浓缩到本书中。这本书深入浅出地介绍了领域驱动设计的核心概念,并通

过具体案例展示了在实际项目中如何应用领域驱动设计。它通过生动的实例,将抽象的领域驱动设计原则转化为切实可行的落地实践,助力读者将PPT 上的空谈理论转化为可行的解决方案。相信通过阅读本书,读者能够更好地理解领域驱动设计的核心理念,并将其应用于实际项目中。

——武伟峰,京东商城前中间件架构师,CSDN 知名博主“天涯泪小武”,Gitee GVP 项目“hotkey”“JLog”“asyncTool”“md_blockchain”作者

当我看到本书的那一刻,顿时眼前一亮。领域驱动设计一直备受业界关注,奈何其门槛过

高。但本书秉持着“从实践中来,到实践中去”的理念,全面且详细地阐述了领域驱动设计的

基本内容、重要意义和不同的观点,是一部不可多得的上乘之作!

——肖宇,Apache Member,Apache ShenYu VP /Dromara 开源组织创始人,《深入理解分布式事务:原理与实战》作者

本书有很多亮点,它讲解了领域驱动设计的很多实战细节,为初学者带来了完整的领域驱

动设计学习路线,还探讨了如何将领域驱动设计与当今业界流行的开发方法相结合等内容,极具阅读价值。

——康伟,中国医学科学院阜外医院信息中心

玉杰的《悟道领域驱动设计》为我指明了领域驱动设计的学习方向,使我受益匪浅,甚至

可以说改变了我的职业发展轨迹。他在书中构建了一个完整的领域驱动设计知识体系图谱,通过翔实的章节规划与安排,为读者搭建起一座从理论到实践的桥梁。我相信,这本书将会成为学习领域驱动设计的佳作。

——周起仝,曾担任京东、58 集团资深架构师,开源爱好者

《悟道领域驱动设计》是一本深度剖析领域驱动设计理念的优秀图书,覃老师在书中带领读者深入探讨了领域驱动设计的核心概念和实践经验。全书内容丰富,从理论基础到实际应用,循序渐进,对学习者友好。此外,覃老师的讲座和培训课程也给我留下了深刻的印象,受

益匪浅。

——牛路,曾担任京东、国美、字节跳动资深技术总监

我推荐这本书给所有对领域驱动设计感兴趣并希望在项目中实施领域驱动设计的软件开发

人员和架构师。作者通过实战案例和理论知识相结合的方式,为读者提供了一条清晰的领域驱动设计学习路线,帮助大家深入理解并应用领域驱动设计来解决实际问题。

——赵忠孝,曾任京东、阿里巴巴、松果出行、米哈游等公司技术专家

本书深入浅出地介绍了领域驱动设计的核心理念与最佳实践。无论你是初学者还是资深开发者,都能从本书中获得宝贵的知识与灵感。推荐给每一位追求卓越软件架构的同行阅读。——李光新,蚂蚁数字科技资深质量效能专家,曾任职于京东、盒马《悟道领域驱动设计》是一本不可多得的技术图书,它从多个维度深入探讨了领域驱动设计的相关知识。通过阅读本书,读者能够全面提升对领域驱动设计的理解和应用能力,从而更好地应对复杂的软件系统开发挑战。值得软件架构师和开发者们阅读。

——周军,中国软件技术专家、高级项目管理者

杰哥在《悟道领域设计驱动》一书中将自己多年的大厂架构实践经验倾囊相授。本书系统

地梳理了领域驱动设计开发体系,由浅入深、由理论到实践,全面讲解了领域驱动设计方法论在实战中的运用。通过阅读本书,我相信读者一定会有所收获。

——项凯,搜狗前高级前端技术专家

本书全面且透彻地阐释了领域驱动设计的理念与实践,从基础概念到高级应用,层层递进。作者将理论知识与丰富的案例相结合,帮助读者快速掌握领域驱动设计的核心知识,领悟其精髓,提升技术能力。无论对个人技术能力提升还是团队应用,本书都不容错过!

——朱家星,曾任乐视、陌陌、伴鱼等公司技术专家


目录

第1 章  领域驱动设计预热 / 1

1.1  初步理解领域驱动设计 / 1

1.1.1  领域驱动设计的简史 / 1

1.1.2  领域驱动设计的基本内容 / 1

1.1.3  领域驱动设计的意义 / 3

1.1.4  领域驱动设计的困境 / 5

1.2  如何学习领域驱动设计 / 6

1.2.1  学习难点 / 6

1.2.2  学习路线 / 6

1.3  领域驱动设计常见争议探讨 / 8

1.3.1  领域驱动设计的适用范围 / 8

1.3.2  贫血模型与充血模型的选择 / 10

1.3.3  领域驱动设计落地的认知差异 / 10

1.3.4  领域驱动设计的技术选型 / 11

1.3.5  领域驱动设计与面向对象编程 / 12

1.3.6  不要过度迷信领域驱动设计 / 13

第2 章  应用架构 / 14

2.1  贫血模型和充血模型 / 14

2.1.1  对象的属性和行为 / 14

2.1.2  贫血模型 / 14

2.1.3  充血模型 / 15

2.1.4  领域驱动设计对模型的要求 / 15

2.2  经典贫血三层架构 / 16

2.2.1  解读贫血三层架构 / 16

2.2.2  贫血三层架构的优点 / 17

2.2.3  贫血三层架构的问题 / 17

2.3  DDD 常见的应用架构 / 18

2.3.1  经典的四层架构 / 18

2.3.2  端口和适配器架构 / 19

2.4  应用架构演化 / 22

2.4.1  合并数据模型 / 22

2.4.2  抽取领域模型 / 22

2.4.3  维护领域对象生命周期 / 24

2.4.4  泛化抽象 / 26

2.4.5  完整的项目结构 / 28

2.5  领域对象的生命周期 / 29

2.5.1  领域对象的生命周期介绍 / 29

2.5.2  领域对象的创建过程 / 29

2.5.3  领域对象的保存过程 / 31

2.5.4  领域对象的重建过程 / 31

2.5.5  领域对象的归档过程 / 33

2.6  应用架构的类型变化链 / 33

2.6.1  应用架构各层的对象类型 / 33

2.6.2  查询过程的类型变化 / 36

2.6.3  创建过程的类型转换 / 40

2.6.4  修改过程的类型转换 / 43

第3 章  实体和值对象 / 45

3.1  实体 / 45

3.1.1  实体的概念 / 45

3.1.2  实体的建模 / 45

3.1.3  实体的创建 / 48

3.1.4  实体的重建 / 48

3.2  值对象 / 49

3.2.1  值对象的概念 / 49

3.2.2  值对象的实现 / 49

3.2.3  值对象的建模 / 50

3.2.4  无副作用的值对象方法 / 51

3.2.5  值对象的创建 / 52

3.2.6  Domain Primitive / 53

3.3  无副作用函数 / 54

3.3.1  无副作用函数的定义 / 54

3.3.2  无副作用函数的实现 / 56

第4 章  聚合与聚合根 / 57

4.1  领域模型相关概念梳理 / 57

4.2  聚合与聚合根的定义 / 58

4.3  聚合与聚合根的作用 / 59

4.4  聚合设计的原则 / 62

4.4.1  设计小而全的聚合 / 62

4.4.2  通过唯一标识引用其他聚合根 / 62

4.4.3  一个事务只更新单个聚合 / 63

4.4.4  跨聚合采用最终一致性 / 64

4.5  聚合的拆分 / 64

4.5.1  第一次拆分 / 65

4.5.2  第二次拆分 / 65

4.6  聚合根的配套组件 / 66

第5 章  Factory、Repository 和领域服务 / 67

5.1  Factory / 67

5.1.1  Factory 的定义 / 67

5.1.2  Factory 的实现 / 67

5.1.3  Factory 的职责辨析 / 68

5.2  Repository / 68

5.2.1  Repository 的定义 / 68

5.2.2  Repository 的实现 / 68

5.2.3  Repository 实战 / 69

5.3  领域服务 / 79

5.3.1  领域服务的基本概念 / 79

5.3.2  领域服务的特点 / 80

5.3.3  领域服务实战 / 80

5.3.4  领域服务与应用服务的区别 / 81

第6 章  设计模式 / 82

6.1  设计模式与领域驱动设计 / 82

6.2  责任链模式 / 82

6.2.1  责任链模式的定义 / 82

6.2.2  责任链的案例代码 / 83

6.2.3  责任链框架⸺模式 / 89

6.2.4  在领域驱动设计中使用责任链

6.3  策略模式 / 90

6.3.1  策略模式的定义 / 90

6.3.2  策略模式的案例代码 / 91

6.3.3  在领域驱动设计中使用策略

模式 / 92

6.4  桥接模式 / 96

6.4.1  桥接模式的定义 / 96

6.4.2  桥接模式的案例代码 / 97

6.4.3  在领域驱动设计中使用桥接

模式 / 100

6.5  规约模式 / 106

6.5.1  规约模式的定义 / 106

6.5.2  规约模式的应用场景 / 107

6.5.3  规约模式的案例代码 / 107

6.5.4  在领域驱动设计中使用规约模式 / 111

6.5.5  规约模式的使用误区 / 112

第7 章  防腐层 / 113

7.1  防腐层的概念理解 / 113

7.2  防腐层的实现方案 / 115

7.2.1  适配器模式的定义 / 115

7.2.2  适配器模式的实现 / 116

7.2.3  使用适配器模式实现防腐层 / 118

7.3  防腐层的实现要点总结 / 121

7.3.1  封装技术细节 / 121

7.3.2  尽量简单且稳定 / 121

7.3.3  入参和出参为本地上下文值对象或基本数据类型 / 122

7.3.4  将外部异常转为本地异常 / 122

7.3.5  将外部错误码转为本地异常 / 123

7.3.6  按需返回 / 123

7.3.7  不在实体和值对象中调用防腐层 / 124

第8 章  领域事件 / 126

8.1  幂等设计 / 126

8.1.1  幂等设计的定义 / 126

8.1.2  写操作的幂等性 / 126

8.1.3  幂等设计的实现方案 / 127

8.2  领域事件建模 / 130

8.2.1  领域事件的概念 / 130

8.2.2  领域事件的应用 / 131

8.2.3  领域事件的消息体 / 131

8.2.4  领域事件的建模实现 / 132

8.3  领域事件生成 / 132

8.3.1  应用层创建领域事件 / 133

8.3.2  聚合根创建领域事件 / 134

8.3.3  领域事件生成总结 / 137

8.4  领域事件发布 / 137

8.4.1  事件存储 / 137

8.4.2  可靠地发布领域事件 / 139

8.5  领域事件订阅 / 142

8.5.1  应用层 / 142

8.5.2  领域事件订阅者案例代码 / 143

第9 章  CQRS / 144

9.1  引入CQRS 的契机 / 144

9.2  CQRS 概念理解 / 145

9.3  CQRS 中的对象命名 / 146

9.4  实现CQRS / 147

9.4.1  方法级的CQRS / 147

9.4.2  相同数据源的CQRS / 148

9.4.3  异构数据源的CQRS / 151

9.5  CQRS 的优缺点 / 153

9.5.1  CQRS 的优点 / 153

9.5.2  CQRS 的缺点 / 154

第10 章  事件溯源 / 155

10.1  事件溯源概念理解 / 155

10.2  第一种事件溯源实现方案 / 157

10.2.1  整体方案介绍 / 157

10.2.2  组件调整总结 / 164

10.2.3  案例运行展示 / 167

10.3  第二种事件溯源实现方案 / 170

10.3.1  整体方案介绍 / 170

10.3.2  组件调整总结 / 172

10.3.3  案例运行展示 / 175

10.4  第三种事件溯源实现方案 / 177

10.4.1  拉链表介绍 / 177

10.4.2  整体方案介绍 / 178

10.4.3  组件调整总结 / 182

10.4.4  案例运行展示 / 182

第11 章  一致性 / 185

11.1  聚合内事务实现 / 185

11.1.1  聚合内事务的实现误区 / 185

11.1.2  聚合内事务的实现思路 / 186

11.1.3  乐观锁 / 187

11.1.4  数据库读写的性能思考 / 192

11.2  跨聚合事务实现 / 193

11.2.1  跨聚合事务的实现思路 / 193

11.2.2  二阶段提交 / 193

11.2.3  本地消息表 / 197

11.2.4  最大努力通知 / 197

11.2.5  TCC 事务方案 / 198

11.2.6  Saga 事务方案 / 207

11.2.7  跨聚合事务的方案总结 / 219

第12 章  战略设计 / 220

12.1  战略设计概述 / 220

12.1.1  战略设计的概念 / 220

12.1.2  战略设计的误区 / 221

12.2  通用语言 / 221

12.2.1  通用语言的概念 / 221

12.2.2  通用语言的构建 / 222

12.2.3  通用语言的维护 / 222

12.3  限界上下文 / 223

12.3.1  限界上下文的定义 / 223

12.3.2  上下文划分依据 / 223

12.3.3  划分限界上下文的实践经验 / 224

12.4  上下文映射 / 224

12.4.1  上下文映射的概念 / 224

12.4.2  上下文映射的类型 / 225

12.5  子域 / 227

12.5.1  子域的定义 / 227

12.5.2  子域的类型 / 227

12.5.3  子域划分 / 229

12.5.4  子域的演化 / 231

12.5.5  子域思想的应用 / 233

第13 章  领域建模 / 237

13.1  领域建模的基本理解 / 237

13.2  事件风暴法介绍 / 237

13.2.1  建模前准备 / 237

13.2.2  核心概念 / 238

13.2.3  建模过程 / 240

13.3  事件风暴法建模案例实战 / 244

13.3.1  案例描述 / 244

13.3.2  案例建模过程 / 245

第14 章  研发效能 / 252

14.1  脚手架 / 252

14.1.1  Maven Archetype 介绍 / 252

14.1.2  ddd-archetype 的使用 / 253

14.2  编码效率提升 / 260

14.2.1  DDD 编码效率遇到的困境 / 260

14.2.2  Graceful Repsonse / 260

14.2.3  代码生成器 / 266

14.2.4  对象转换工具 / 267

14.3  代码静态分析工具 / 268

14.3.1  SpotBugs / 269

14.3.2  PMD / 271

14.3.3  CheckStyle / 272

14.3.4  SonarLint / 272

14.4  低代码 / 274

14.4.1  低代码介绍 / 274

14.4.2  低代码平台核心流程 / 274

14.4.3  低代码核心技术 / 275

14.4.4  低代码反思 / 278

14.5  持续集成/ 持续交付 / 281

14.5.1  概念理解 / 281

14.5.2  实现方案 / 282

14.5.3  持续集成与领域驱动设计 / 282

第15 章  测试驱动开发 / 283

15.1  TDD 基本理解 / 283

15.2  TDD 常见的误区 / 284

15.3  TDD 技术选型 / 286

15.4  TDD 案例实战 / 287

15.4.1  奇怪的计算器 / 287

15.4.2  贫血模型三层架构的TDD 实战 / 297

15.4.3  DDD 下的TDD 实战 / 304

第16 章  敏捷开发 / 309

16.1  敏捷开发介绍 / 309

16.1.1  敏捷开发价值观 / 309

16.1.2  敏捷开发十二个原则 / 310

16.2  敏捷开发常用实践方法 / 312

16.2.1  Scrum / 312

16.2.2  看板 / 314

16.2.3  极限编程 / 315

16.3  DDD+ 敏捷开发 / 318

16.3.1  以通用语言作为互动的基础 / 318

16.3.2  从最小可行产品开始迭代 / 319

16.3.3  简化文档 / 319

16.3.4  使用子域的思想指导确定需求

优先级 / 319

16.3.5  持续反馈和改进 / 319

第17 章  架构可视化 / 320

17.1  架构可视化与C4 模型 / 320

17.1.1  系统上下文图 / 322

17.1.2  容器图 / 323

17.1.3  组件图 / 324

17.1.4  代码图 / 325

17.1.5  系统全景图 / 325

17.1.6  动态图 / 326

17.1.7  部署图 / 327

17.2  C4 模型规范和review

checklist / 329

17.2.1  C4 模型规范 / 329

17.2.2  review checklist / 329

17.3  使用文本绘制C4 架构图 / 329

17.3.1  文本绘图工具选型 / 329

17.3.2  VS Code 下C4-PlantUML 的

安装 / 330

17.3.3  IntelliJ Idea 下C4-PlantUML 的

安装 / 332

17.3.4  案例实战及C4-PlantUML 语法

介绍 / 332

17.4  使用绘图工具绘制C4 架构图 / 338

17.4.1  绘图工具的选择 / 338

17.4.2  架构图绘制实战 / 338

17.4.3  架构图绘制心得 / 342

第18 章  使用DDD 进行系统重构 / 343

18.1  系统重构的基本了解 / 343

18.2  系统重构的模式 / 343

18.2.1  修缮者模式 / 344

18.2.2  绞杀者模式 / 345

18.2.3  推翻重建模式 / 345

18.3  系统重构的基本流程 / 346

18.3.1  启动 / 346

18.3.2  规划 / 349

18.3.3  执行 / 351

18.3.4  监控 / 356

18.3.5  收尾 / 357

第19 章  布道领域驱动设计 / 358

19.1  为团队引入领域驱动设计 / 358

19.2  编码指南 / 360

19.2.1  核心概念 / 360

19.2.2  应用架构 / 361

19.2.3  事务控制 / 364

19.2.4  研发效率 / 364

19.2.5  代码质量 / 364

19.2.6  过程文档 / 364

19.3  能力成熟度模型 / 365

19.3.1  软件能力成熟度模型 / 365

19.3.2  领域驱动设计能力成熟度模型 / 365

第20 章  使用DDD 开发视频直播服务 / 367

20.1  视频直播技术介绍 / 367

20.2  视频直播服务案例介绍 / 368

20.2.1  案例背景 / 368

20.2.2  核心业务逻辑 / 369

20.2.3  技术选型 / 369

20.3  使用DDD 实现视频直播服务 / 370

20.3.1  领域建模 / 370

20.3.2  系统架构 / 371

20.3.3  代码工程初始化 / 372

20.3.4  CQRS / 372

20.3.5  ACL / 374

20.3.6  Graceful Response / 374

20.3.7  接口自动化测试 / 376

20.4  案例运行截图 / 377

20.4.1  直播间管理 / 377

20.4.2  主播管理 / 377

20.4.3  直播管理 / 378

第21 章  使用DDD 开发AIGC产品 / 382

21.1  AIGC 与DDD / 382

21.2  AIGC 案例介绍 / 382

21.2.1  案例背景 / 383

21.2.2  核心业务逻辑 / 383

21.2.3  系统架构 / 385

21.2.4  技术选型 / 385

21.3  DDD 开发AIGC 产品 / 385

21.3.1  领域建模 / 386

21.3.2  代码工程初始化 / 387

21.3.3  CQRS / 387

21.3.4  领域服务 / 388

21.3.5  ACL / 390

21.3.6  Graceful Response / 391

21.3.7  接口自动化测试 / 391

21.4  案例运行截图 / 393

21.4.1  创建日记接口 / 393

21.4.2  创建贴纸接口 / 394

21.4.3  根据贴纸生成日记正文接口 / 395


前言/序言

领域驱动设计(Domain-Driven Design,DDD)自提出以来,备受业界推崇,长盛不衰。众多从业者对领域驱动设计表现出极大的兴趣,然而,其学习门槛常常让人望而却步。我亦曾与大多数初学者一样,在初次接触领域驱动设计时便感受到了它的艰深复杂。即使经过长时间的摸索,始终不能融会贯通并将其应用于实践,这让我一度对领域驱动设计的理论产生怀疑,甚至认为其只是纸上谈兵、空洞无物。

后来,又经过了很长时间的“磕磕碰碰”,我终于对领域驱动设计有了一些了解,并且从领域驱动设计中获益,但我也深刻体会到初学者面对这一庞大的理论体系时的无助和困惑。因此,我希望将自己对领域驱动设计的理解分享出来,与他人交流探讨,共同进步。最初,我撰写了一些关于领域驱动设计的文章并发布在微信公众号上,得到了读者的支持和反馈。在与他们的互动中,我获益匪浅,并听取他们的建议,在GitHub 中创建了“Thinking-in-DDD”项目,专门汇总整理我关于领域驱动设计的实践经验和学习资源。一篇篇技术文章的沉淀,最终形成了这本书。

本书只是我个人在实践领域驱动设计过程中的经验教训和总结,相较于领域驱动设计宏伟的理论体系,这本书还是显得太单薄了。如果本书能成为初学者学习领域驱动设计的入门读物,帮助他们少走弯路,我便心满意足了。

主要内容

本书共21 章,主要内容如下。

第1 章主要带领读者初步了解领域驱动设计,包括其历史背景、基本理解、意义、困境,以及学习难点和学习路线,也探讨了业界对领域驱动设计的一些争议。

第2 章介绍充血模型和常用的应用架构,并带领读者从贫血三层架构出发,逐步演化出一套可落地的应用架构。另外介绍了如何在这套架构中实现领域对象生命周期的维护和类型变化链。

第3 ~ 5 章对战术设计的基本概念进行介绍,包括实体、值对象、聚合、聚合根、Factory、Repository 和领域服务。

第6、7 章探讨如何在领域驱动设计中应用设计模式来解决复杂的业务问题。

第8 ~ 10 章介绍领域事件、CQRS、事件溯源,探讨事件驱动的应用实现。

第11 章探讨领域驱动设计的一致性实现,包括聚合内事务、跨聚合事务的一致性方案,并介绍经典的分布式事务解决方案。

第12、13 章分别探讨战略设计和领域建模。

第14 ~ 16 章探讨如何将业界流行的开发方法与领域驱动设计相融合,使领域驱动设计成为实际开发的利器。

第17 章介绍基于C4 模型的架构可视化方法。

第18 章探讨如何将领域驱动设计应用于系统重构。

第19 章探讨如何在团队内推广领域驱动设计。

第20、21 章提供两个综合实战案例,基于领域驱动设计开发视频直播服务和AIGC 产品。

如何阅读本书

本书的章节内容是按照1.2.2 节中给出的学习路线安排的,零基础的读者可以按照顺序逐章节阅读,具有一定基础的读者可以根据实际情况选择自己感兴趣的内容阅读。

读者可以通过“读者服务”提示获得领域驱动设计相关的学习资源,具体包括:读者群的公开技术分享视频教程、随书源码和案例代码、章节实战作业等资源。这些资源能帮助读者更好地理解并应用领域驱动设计。

读者在学习过程中遇到疑问时,可以通过微信公众号“悟道领域驱动设计”与我交流探讨。我会定期整理收到的读者疑问,并将其发布在微信公众号中。

致谢

感谢我的家人和朋友,是你们的支持和鼓励,使本书得以顺利完成创作。

感谢电子工业出版社博文视点公司和宋亚东编辑,感谢你们对本书的认可和付出。

感谢“悟道领域驱动设计”微信公众号的读者,是你们的日常催更,坚定了我创作的信心。

由于作者水平所限,书中难免存在谬误,恳请各位同行和前辈不吝批评、指正。

覃玉杰




推荐序1

在17 世纪科学兴起之际,英国哲学家弗朗西斯• 培根有一段关于科学潜力的解释,并警告过科学技术造福人类的同时可能带来的弊端。他充分赞美了通过科学技术追求“知识和技能”的意义,但同时提出追求科学进步应该以“人性与慈善”为导向,其宗旨应该是“改善生活”。

近代以来,科学技术的发展与社会发展的不匹配引发了许多实际困扰。企业管理也受到了软件技术高速发展的强烈冲击。在日常的企业运营中,人们无不感到具体的业务能力发挥和价值实现受到系统架构的各种强烈约束,无法充分展示特色业务能力的优越性。

企业所应用的大型软件系统的分布式架构经历了从SOA 体系到如今基于云原生的大规模API 应用的变化,依赖关系从系统级依赖演变为API 功能级别的依赖,分布式体系治理能力越来越重要,系统规模越来越大,亟需一种新的设计方法来最终解决这个问题。

现实中有很多因素使得软件研发过程变得复杂,但是究其根本是业务领域本身的错综复杂、各种业务之间的一致性协调、业务技术的匹配、实际商业价值评估,以及未来发展的适应性等。在控制和解决复杂性方面,首要任务是找到一种能够应对大型复杂系统的设计方法论。2004 年,Eric Evans 在他的著作Domain-Driven Design : Tackling Complexity in the Heart ofSoftware(《领域驱动设计:软件核心复杂性应对之道》)中提出了领域驱动设计的概念。通过战略设计来指导拆分复杂系统,通过战术设计来指导实现复杂系统;通过规范业务术语的通用语言来进行工作的沟通、模型驱动的迭代研发过程等,帮助企业最终实现整个复杂系统的科学建设过程。

我与玉杰有多年的交情,是他的好友、前同事和领导,他对技术精进的追求给我留下了深刻的印象。多年前,他在担任研发中心架构师期间,主导设计并实现了面向互联网应用的分布式医疗服务平台。在这个过程中,他展现了良好的技术素养、扎实的理论基础和卓越的团队领导力。在玉杰之后的职业生涯中,我们一直保持着沟通和交流。

玉杰一直是DDD 方法论的践行者和布道者。在他的书中,他给出了基础理论、概念分析、常见问题解答、实践分析与现实指导等,为想全面理解DDD 的技术人员提供了全面和深入的指导。特别是书中提到的直播和AI 技术,以及企业数字化转型过程中的重头戏⸺作为一名服务于国内外企业数字化转型和高新技术企业创新业务的战略顾问,我了解许多企业的技术体系发展过程,并经常带领团队为企业规划未来的技术体系和发展战略。我深刻体会到DDD 方法论在指导技术实践层面的重要作用,DDD 也是我们日常会议中经常提及的专业术语。对于技术人员来说,掌握DDD 这种适应未来技术市场需求的总体设计方法论非常重要。幸运的是,这本书能够为技术人员提供全面的学习路径和实践指引,帮助他们提升个人竞争力。

最后,我要感谢玉杰花费大量的个人时间和精力,本着坚持分享的精神为广大技术人员提供了一本好书。我推荐这本书作为践行领域驱动设计的指导手册。

高铁成      

埃森哲(中国)有限公司资深架构师

推荐序2

领域驱动设计(DDD)的概念诞生于二十多年前。二十多年来,DDD 的热度一直持续增长,在微服务时代,DDD 更是受到了业界的广泛关注。尽管DDD 的概念已经有二十多年的历史,且有许多实践者致力于将其应用到实际开发中,但成功的案例仍然较少,行业缺乏足够的完整实战经验供借鉴。

在这样的背景下,本书应运而生。在本书中,作者不仅继承了DDD 的理论精髓,讲解了领域驱动设计的核心概念,还分享了自己多年的实战经验,聚焦于在实际项目中实现这些理论。书中通过翔实的落地场景和具体的案例分析,展示了如何逐步将DDD 的理论应用于实际项目,为开发者提供了从理论到实践的完整指导。这本书不仅是对DDD 理论的一次全面回顾,还是对DDD 实战经验的总结。

本书的独特之处在于特别关注实际应用中的难点,结合国内开发环境的特点,深入浅出地解析了DDD 的实现细节,帮助读者拼起知识的碎片。这种详尽的指导对于开发者学习和掌握DDD 尤其有实际意义。我相信无论是资深开发者,还是刚接触DDD 的初学者,都能从这本书中受益匪浅。

作为玉杰多年的同事兼好友,我与玉杰在工作之余就DDD 的概念、落地实践等主题进行过多次探讨和交流。受玉杰邀请,我参与了DDD-HCMS 项目的前期架构设计和开发。DDDHCMS是一个基于DDD 理论开发的Headless CMS,融入了DDD 战略设计、战术设计、应用架构、CQRS 等理论,旨在为DDD 行业提供一个重量级的应用案例。

玉杰曾告诉我,他准备写一本关于DDD 的图书。DDD 的理论殿堂恢宏壮丽,其中的概念繁多,如同浩瀚星空中的星辰、广袤大海中的波涛,多少人甚至钻研多年也未能真正入门,否则也不会导致二十多年来有关DDD 的著作如此稀少。因此,我非常理解本书创作过程的艰

辛和曲折。在收到本书手稿时,我非常激动,当即拜读了一遍,许多百思不得其解的问题,刹那间如春回大地般冰雪消融,可谓醍醐灌顶,收获满满。

在此,感谢玉杰的辛勤付出,为业界带来了这样一部优秀的作品。希望本书的出版能进一

步推动DDD 在开发领域的普及和应用,为行业和开发者带来更多的可能性。

周顶  

京东前架构师



相关推荐