书籍详情
领域驱动设计学习手册
作者:[以色列]弗拉德·霍诺诺夫(Vlad Khononov)
出版社:中国电力出版社
出版时间:2023-04-01
ISBN:9787519876333
定价:¥98.00
购买这本书可以去
内容简介
本书的主要内容有:如何分析公司的业务领域,了解你正在构建的系统如何符合其竞争战略。如何使用领域驱动设计的战略和战术工具来构建有效的软件解决方案,从而满足业务需求。如何建立对你遇到的业务领域知识的共同理解。如何将系统分解为限界上下文。如何协调多个团队的工作。如何在遗留系统改造项目中,循序渐进地引入领域驱动设计。
作者简介
Vlad(Vladik)Khononov是一名软件工程师,他拥有超过20年的行业经验。在此期间,他曾为不同类型的公司工作过,并担任过从网站管理员到首席架构师等各种职务。作为领域驱动设计的长期支持和倡导者,Vlad帮助企业理解其业务领域,梳理遗留系统,并应对复杂架构的挑战。
目录
目录
序 1
前言 3
第0 章 引言 11
部分 战略设计
第1 章 分析业务领域 15
1.1 什么是业务领域 15
1.2 什么是子域 16
1.2.1 子域的类型 16
1.2.2 子域对比 .19
1.2.3 识别子域的边界 23
1.3 领域分析案例 .26
1.3.1 Gigmaster 26
1.3.2 BusVNext 28
1.4 谁是领域专家 .29
1.5 本章小结30
1.6 本章练习31
第2 章 探索领域知识 33
2.1 业务问题33
2.2 知识的发现 34
2.3 沟通 .34
2.4 什么是通用语言 36
2.5 业务语言37
2.5.1 场景 37
2.5.2 一致性 38
2.6 业务领域模型 .39
2.6.1 什么是模型 39
2.6.2 有效的模型 40
2.6.3 为业务领域建模 40
2.6.4 持续的努力 41
2.6.5 工具 41
2.6.6 挑战 42
2.7 本章小结43
2.8 本章练习43
第3 章 管理领域复杂性 .45
3.1 不一致的模型 .45
3.2 什么是限界上下文 47
3.2.1 模型边界 .48
3.2.2 精练通用语言 49
3.2.3 限界上下文的范围 .49
3.3 限界上下文与子域的对比 50
3.3.1 子域 51
3.3.2 限界上下文 51
3.3.3 子域与限界上下文之间的交互 .51
3.4 边界 .53
3.4.1 物理边界 .53
3.4.2 所有权边界 54
3.5 现实生活中的限界上下文 54
3.5.1 语义域 55
3.5.2 科学 55
3.5.3 买一个冰箱 56
3.6 本章小结58
3.7 本章练习59
第4 章 集成限界上下文 .61
4.1 协作 .62
4.1.1 合作 62
4.1.2 共享内核 .63
4.2 客户?C 供应商 .65
4.2.1 跟随者 65
4.2.2 防腐层 66
4.2.3 开放主机服务 67
4.3 各行其道68
4.3.1 沟通问题 .68
4.3.2 通用子域 .68
4.3.3 模型差异 .69
4.4 上下文映射图 .69
4.4.1 维护 70
4.4.2 限制 70
4.5 本章小结70
4.6 本章练习72
第二部分 战术设计
第5 章 实现简单业务逻辑 .75
5.1 事务脚本75
5.1.1 实现 76
5.1.2 现实并非那么简单 .76
5.1.3 何时使用事务脚本 .81
5.2 活动记录82
5.2.1 实现 82
5.2.2 何时使用活动记录 .83
5.3 让我们更务实一些 84
5.4 本章小结84
5.5 本章练习85
第6 章 应对复杂业务逻辑 .87
6.1 历史背景87
6.2 领域模型88
6.2.1 实现 89
6.2.2 构件 89
6.2.3 管理复杂性 . 107
6.3 本章小结. 108
6.4 本章练习. 109
第7 章 时间维度建模 .111
7.1 事件溯源. 111
7.1.1 搜索 . 116
7.1.2 分析 . 118
7.1.3 事实来源 119
7.1.4 事件存储 120
7.2 事件溯源领域模型 . 121
7.2.1 优势 . 123
7.2.2 劣势 . 124
7.3 常见问题. 125
7.3.1 性能 . 125
7.3.2 删除数据 127
7.3.3 为什么不能做这些…… . 127
7.4 本章小结. 128
7.5 本章练习. 128
第8 章 架构模式 . 131
8.1 业务逻辑与架构模式 131
8.2 分层架构模式 132
8.2.1 表示层 132
8.2.2 业务逻辑层 . 133
8.2.3 数据访问层 . 133
8.2.4 各层之间的通信 134
8.2.5 分层架构的异化 134
8.2.6 何时使用分层架构模式 . 139
8.3 端口?C 适配器架构模式 140
8.3.1 术语 . 140
8.3.2 依赖倒置原则 . 141
8.3.3 架构组件的集成 142
8.3.4 端口?C 适配器架构的变体 143
8.3.5 何时使用端口?C 适配器架构模式 . 143
8.4 命令?C 查询职责分离模式 . 143
8.4.1 混合语言建模 . 144
8.4.2 CQRS 模式的实现 144
8.4.3 投影读取模型 . 145
8.4.4 面临的挑战 . 147
8.4.5 模型分解 148
8.4.6 何时使用CQRS 架构 . 148
8.5 本章范围. 149
8.6 本章小结. 149
8.7 本章练习. 150
第9 章 通信模式 . 153
9.1 模型转换. 153
9.1.1 无状态模型转换 154
9.1.2 有状态模型转换 156
9.2 聚合的整合 158
9.2.1 发件箱模式 . 161
9.2.2 业务旅程 163
9.2.3 流程管理器 . 166
9.3 本章小结. 170
9.4 本章练习. 170
第三部分 领域驱动设计的应用实践
第10 章 设计的启示 . 175
10.1 启示 175
10.2 限界上下文 . 176
10.3 业务逻辑实现模式 177
10.4 架构模式 179
10.5 测试策略 180
10.5.1 测试金字塔 181
10.5.2 测试菱形 181
10.5.3 反向测试金字塔 . 181
10.6 战术设计决策树 182
10.7 本章小结 183
10.8 本章练习 183
第11 章 设计决策的演进 . 185
11.1 业务领域的变化 185
11.1.1 核心子域向通用子域转变 .186
11.1.2 通用子域向核心子域转变 .186
11.1.3 支撑子域向通用子域转变 .187
11.1.4 支撑子域向核心子域转变 .187
11.1.5 核心子域向支撑子域转变 .187
11.1.6 通用子域向支撑子域转变 .187
11.2 战略设计的顾虑 188
11.3 战术设计的顾虑 189
11.3.1 事务脚本模式向活动记录模式转变 .189
11.3.2 活动记录模式向领域模型模式转变 .189
11.3.3 领域模型模式向事件溯源领域模型模式转变 .191
11.3.4 生成过去事务 191
11.3.5 为迁移事件建模 .193
11.4 组织变革 193
11.4.1 从合作关系到客户?C 供应商关系 194
11.4.2 从客户?C 供应商关系到各行其道关系 .194
11.5 领域知识 194
11.6 增长 195
11.6.1 子域 196
11.6.2 限界上下文 197
11.6.3 聚合 197
11.7 本章小结 198
11.8 本章练习 198
第12 章 事件风暴 201
12.1 什么是事件风暴 201
12.2 谁应该参与事件风暴 . 201
12.3 需要什么来引导事件风暴 202
12.4 事件风暴流程 203
12.4.1 步:非结构化探索 203
12.4.2 第二步:时间线 . 204
12.4.3 第三步:痛点 205
12.4.4 第四步:关键事件 206
12.4.5 第五步:命令 206
12.4.6 第六步:策略 207
12.4.7 第七步:读模型 . 208
12.4.8 第八步:外部系统 209
12.4.9 第九步:聚合 209
12.4.10 第十步:限界上下文 . 209
12.5 变体 210
12.6 何时使用事件风暴 211
12.7 引导技巧 212
12.7.1 观察动态 213
12.7.2 远程事件风暴 213
12.8 本章小结 213
12.9 本章练习 214
第13 章 真实世界中的领域驱动设计 215
13.1 战略分析 216
13.1.1 理解业务领域 216
13.1.2 探索当前的设计 . 217
13.2 现代化战略 . 218
13.2.1 战略现代化 219
13.2.2 战术现代化 221
13.2.3 培养通用语言 221
13.3 实用领域驱动设计 224
13.4 推销领域驱动设计 225
13.5 本章小结 227
13.6 本章练习 228
第四部分 与其他方法论和模式的关系
第14 章 微服务 231
14.1 什么是服务 . 231
14.2 什么是微服务 232
14.2.1 方法即服务:完美的微服务 233
14.2.2 设计目标 234
14.2.3 系统复杂度 235
14.2.4 微服务即深度服务 236
14.2.5 微服务即深模块 . 237
14.3 领域驱动设计和微服务的边界 . 239
14.3.1 限界上下文 239
14.3.2 聚合 241
14.3.3 子域 242
14.4 压缩微服务的公共接口 243
14.4.1 开放主机服务 243
14.4.2 防腐层 . 244
14.5 本章小结 244
14.6 本章练习 245
第15 章 事件驱动架构 . 247
15.1 事件驱动架构概述 247
15.2 事件 248
15.2.1 事件、命令与消息 248
15.2.2 事件结构 249
15.2.3 事件类型 249
15.3 设计事件驱动集成 255
15.3.1 分布式的大泥球 . 255
15.3.2 时域耦合 256
15.3.3 功能耦合 257
15.3.4 实现耦合 257
15.3.5 重构事件驱动集成 257
15.3.6 事件驱动设计的启示 258
15.4 本章小结 260
15.5 本章练习 260
第16 章 数据网格 263
16.1 分析型数据模型与事务型数据模型 263
16.1.1 事实表 . 264
16.1.2 维度表 . 266
16.1.3 分析模型 267
16.2 分析数据管理平台 268
16.2.1 数据仓库 268
16.2.2 数据湖 . 271
16.2.3 数据仓库和数据湖架构的挑战 272
16.3 数据网格 273
16.3.1 围绕领域分解数据 273
16.3.2 数据即产品 274
16.3.3 赋能自治 276
16.3.4 构建生态系统 276
16.3.5 结合数据网格和领域驱动设计 276
16.4 本章小结 278
16.5 本章练习 278
第17 章 结束语 281
17.1 问题 281
17.2 解决方案 282
17.3 实现 282
17.4 深入阅读 282
17.4.1 先进领域驱动设计 282
17.4.2 架构与集成模式 . 284
17.4.3 遗留系统的现代化改造 284
17.4.4 事件风暴 285
17.5 全书总结 285
附录A 应用领域驱动设计的案例 287
附录B 练习题参考答案 303
参考资料 311
序 1
前言 3
第0 章 引言 11
部分 战略设计
第1 章 分析业务领域 15
1.1 什么是业务领域 15
1.2 什么是子域 16
1.2.1 子域的类型 16
1.2.2 子域对比 .19
1.2.3 识别子域的边界 23
1.3 领域分析案例 .26
1.3.1 Gigmaster 26
1.3.2 BusVNext 28
1.4 谁是领域专家 .29
1.5 本章小结30
1.6 本章练习31
第2 章 探索领域知识 33
2.1 业务问题33
2.2 知识的发现 34
2.3 沟通 .34
2.4 什么是通用语言 36
2.5 业务语言37
2.5.1 场景 37
2.5.2 一致性 38
2.6 业务领域模型 .39
2.6.1 什么是模型 39
2.6.2 有效的模型 40
2.6.3 为业务领域建模 40
2.6.4 持续的努力 41
2.6.5 工具 41
2.6.6 挑战 42
2.7 本章小结43
2.8 本章练习43
第3 章 管理领域复杂性 .45
3.1 不一致的模型 .45
3.2 什么是限界上下文 47
3.2.1 模型边界 .48
3.2.2 精练通用语言 49
3.2.3 限界上下文的范围 .49
3.3 限界上下文与子域的对比 50
3.3.1 子域 51
3.3.2 限界上下文 51
3.3.3 子域与限界上下文之间的交互 .51
3.4 边界 .53
3.4.1 物理边界 .53
3.4.2 所有权边界 54
3.5 现实生活中的限界上下文 54
3.5.1 语义域 55
3.5.2 科学 55
3.5.3 买一个冰箱 56
3.6 本章小结58
3.7 本章练习59
第4 章 集成限界上下文 .61
4.1 协作 .62
4.1.1 合作 62
4.1.2 共享内核 .63
4.2 客户?C 供应商 .65
4.2.1 跟随者 65
4.2.2 防腐层 66
4.2.3 开放主机服务 67
4.3 各行其道68
4.3.1 沟通问题 .68
4.3.2 通用子域 .68
4.3.3 模型差异 .69
4.4 上下文映射图 .69
4.4.1 维护 70
4.4.2 限制 70
4.5 本章小结70
4.6 本章练习72
第二部分 战术设计
第5 章 实现简单业务逻辑 .75
5.1 事务脚本75
5.1.1 实现 76
5.1.2 现实并非那么简单 .76
5.1.3 何时使用事务脚本 .81
5.2 活动记录82
5.2.1 实现 82
5.2.2 何时使用活动记录 .83
5.3 让我们更务实一些 84
5.4 本章小结84
5.5 本章练习85
第6 章 应对复杂业务逻辑 .87
6.1 历史背景87
6.2 领域模型88
6.2.1 实现 89
6.2.2 构件 89
6.2.3 管理复杂性 . 107
6.3 本章小结. 108
6.4 本章练习. 109
第7 章 时间维度建模 .111
7.1 事件溯源. 111
7.1.1 搜索 . 116
7.1.2 分析 . 118
7.1.3 事实来源 119
7.1.4 事件存储 120
7.2 事件溯源领域模型 . 121
7.2.1 优势 . 123
7.2.2 劣势 . 124
7.3 常见问题. 125
7.3.1 性能 . 125
7.3.2 删除数据 127
7.3.3 为什么不能做这些…… . 127
7.4 本章小结. 128
7.5 本章练习. 128
第8 章 架构模式 . 131
8.1 业务逻辑与架构模式 131
8.2 分层架构模式 132
8.2.1 表示层 132
8.2.2 业务逻辑层 . 133
8.2.3 数据访问层 . 133
8.2.4 各层之间的通信 134
8.2.5 分层架构的异化 134
8.2.6 何时使用分层架构模式 . 139
8.3 端口?C 适配器架构模式 140
8.3.1 术语 . 140
8.3.2 依赖倒置原则 . 141
8.3.3 架构组件的集成 142
8.3.4 端口?C 适配器架构的变体 143
8.3.5 何时使用端口?C 适配器架构模式 . 143
8.4 命令?C 查询职责分离模式 . 143
8.4.1 混合语言建模 . 144
8.4.2 CQRS 模式的实现 144
8.4.3 投影读取模型 . 145
8.4.4 面临的挑战 . 147
8.4.5 模型分解 148
8.4.6 何时使用CQRS 架构 . 148
8.5 本章范围. 149
8.6 本章小结. 149
8.7 本章练习. 150
第9 章 通信模式 . 153
9.1 模型转换. 153
9.1.1 无状态模型转换 154
9.1.2 有状态模型转换 156
9.2 聚合的整合 158
9.2.1 发件箱模式 . 161
9.2.2 业务旅程 163
9.2.3 流程管理器 . 166
9.3 本章小结. 170
9.4 本章练习. 170
第三部分 领域驱动设计的应用实践
第10 章 设计的启示 . 175
10.1 启示 175
10.2 限界上下文 . 176
10.3 业务逻辑实现模式 177
10.4 架构模式 179
10.5 测试策略 180
10.5.1 测试金字塔 181
10.5.2 测试菱形 181
10.5.3 反向测试金字塔 . 181
10.6 战术设计决策树 182
10.7 本章小结 183
10.8 本章练习 183
第11 章 设计决策的演进 . 185
11.1 业务领域的变化 185
11.1.1 核心子域向通用子域转变 .186
11.1.2 通用子域向核心子域转变 .186
11.1.3 支撑子域向通用子域转变 .187
11.1.4 支撑子域向核心子域转变 .187
11.1.5 核心子域向支撑子域转变 .187
11.1.6 通用子域向支撑子域转变 .187
11.2 战略设计的顾虑 188
11.3 战术设计的顾虑 189
11.3.1 事务脚本模式向活动记录模式转变 .189
11.3.2 活动记录模式向领域模型模式转变 .189
11.3.3 领域模型模式向事件溯源领域模型模式转变 .191
11.3.4 生成过去事务 191
11.3.5 为迁移事件建模 .193
11.4 组织变革 193
11.4.1 从合作关系到客户?C 供应商关系 194
11.4.2 从客户?C 供应商关系到各行其道关系 .194
11.5 领域知识 194
11.6 增长 195
11.6.1 子域 196
11.6.2 限界上下文 197
11.6.3 聚合 197
11.7 本章小结 198
11.8 本章练习 198
第12 章 事件风暴 201
12.1 什么是事件风暴 201
12.2 谁应该参与事件风暴 . 201
12.3 需要什么来引导事件风暴 202
12.4 事件风暴流程 203
12.4.1 步:非结构化探索 203
12.4.2 第二步:时间线 . 204
12.4.3 第三步:痛点 205
12.4.4 第四步:关键事件 206
12.4.5 第五步:命令 206
12.4.6 第六步:策略 207
12.4.7 第七步:读模型 . 208
12.4.8 第八步:外部系统 209
12.4.9 第九步:聚合 209
12.4.10 第十步:限界上下文 . 209
12.5 变体 210
12.6 何时使用事件风暴 211
12.7 引导技巧 212
12.7.1 观察动态 213
12.7.2 远程事件风暴 213
12.8 本章小结 213
12.9 本章练习 214
第13 章 真实世界中的领域驱动设计 215
13.1 战略分析 216
13.1.1 理解业务领域 216
13.1.2 探索当前的设计 . 217
13.2 现代化战略 . 218
13.2.1 战略现代化 219
13.2.2 战术现代化 221
13.2.3 培养通用语言 221
13.3 实用领域驱动设计 224
13.4 推销领域驱动设计 225
13.5 本章小结 227
13.6 本章练习 228
第四部分 与其他方法论和模式的关系
第14 章 微服务 231
14.1 什么是服务 . 231
14.2 什么是微服务 232
14.2.1 方法即服务:完美的微服务 233
14.2.2 设计目标 234
14.2.3 系统复杂度 235
14.2.4 微服务即深度服务 236
14.2.5 微服务即深模块 . 237
14.3 领域驱动设计和微服务的边界 . 239
14.3.1 限界上下文 239
14.3.2 聚合 241
14.3.3 子域 242
14.4 压缩微服务的公共接口 243
14.4.1 开放主机服务 243
14.4.2 防腐层 . 244
14.5 本章小结 244
14.6 本章练习 245
第15 章 事件驱动架构 . 247
15.1 事件驱动架构概述 247
15.2 事件 248
15.2.1 事件、命令与消息 248
15.2.2 事件结构 249
15.2.3 事件类型 249
15.3 设计事件驱动集成 255
15.3.1 分布式的大泥球 . 255
15.3.2 时域耦合 256
15.3.3 功能耦合 257
15.3.4 实现耦合 257
15.3.5 重构事件驱动集成 257
15.3.6 事件驱动设计的启示 258
15.4 本章小结 260
15.5 本章练习 260
第16 章 数据网格 263
16.1 分析型数据模型与事务型数据模型 263
16.1.1 事实表 . 264
16.1.2 维度表 . 266
16.1.3 分析模型 267
16.2 分析数据管理平台 268
16.2.1 数据仓库 268
16.2.2 数据湖 . 271
16.2.3 数据仓库和数据湖架构的挑战 272
16.3 数据网格 273
16.3.1 围绕领域分解数据 273
16.3.2 数据即产品 274
16.3.3 赋能自治 276
16.3.4 构建生态系统 276
16.3.5 结合数据网格和领域驱动设计 276
16.4 本章小结 278
16.5 本章练习 278
第17 章 结束语 281
17.1 问题 281
17.2 解决方案 282
17.3 实现 282
17.4 深入阅读 282
17.4.1 先进领域驱动设计 282
17.4.2 架构与集成模式 . 284
17.4.3 遗留系统的现代化改造 284
17.4.4 事件风暴 285
17.5 全书总结 285
附录A 应用领域驱动设计的案例 287
附录B 练习题参考答案 303
参考资料 311
猜您喜欢