[套装书]深入实践DDD:以DSL驱动复杂软件开发+中台架构与实现:基于DDD和微服务(2册)

作者
杨捷锋 欧创新 邓頔
丛书名
架构师书库
出版社
机械工业出版社
ISBN
9782104091574
简要
简介
这是一部系统讲解如何基于DDD思想实现中台和微服务协同设计和落地的著作。 它将DDD、中台和微服务三者结合,一方面,它为中台的划分和领域建模提供指导,帮助企业更好地完成中台建设,实现中台的能力复用;一方面,它为微服务的拆分和设计提供指导,帮助团队提升分布式微服务的架构设计能力。给出了一套体系化的基于DDD思想的企业级前、中、后台协同设计方法。 本书注重实战,汇聚了大量分布式架构的最新设计方法、思想和理念,同时包含大量的案例和代码,是理论与实践相结合的最佳经验分享。交互式的行文风格,文字有活力,内容不刻板,简洁易懂。 本书共分为六个部分: 第一部分 认识中台(第1~4章) 主要从业务中台、数据中台、技术中台以及与之匹配的组织架构等多个方面分析传统企业中台转型应该具备的能力,带你初步了解DDD是如何指导中台和微服务设计,并厘清它们的协作关系。 . 第二部分 DDD基本原理(第5~11章) 通过浅显易懂的案例讲解DDD的核心基础知识、设计思想、原则和方法等内容,了解它们之间的协作和依赖关系,做好中台实践前的准备工作。 第三部分 中台领域建模和微服务设计(第12~19章) 首先,通过案例手把手带你用DDD方法完成中台和微服务的全流程设计,深刻理解DDD在中台领域建模和微服务设计中的步骤、方法、设计思想和价值;然后,通过一个完整案例带你了解用DDD设计方法完成领域建模与微服务设计的全流程。 第四部分 前端设计(第20~21章) 引入微前端和单元化的设计思想,通过前端微服务化和单元化设计思想,解决业务中台建设完成后前端应用仍然为单体和前后端服务集成复杂的难点。此外,还探讨了基于领域模型的单元化设计方法。 第五部分 中台设计案例(第22章) 采用自顶向下的领域建模策略,通过案例讲解中台设计的完整流程。涵盖业务领域分解、中台领域建模、微服务和微前端设计、单元化设计以及业务和数据如何融合等内容。 第六部分 总结(第23~24章) 结合作者多年的设计经验和思考,阐述单体应用向微服务架构的演进策略、如何避免陷入DDD设计的常见误区、微服务设计原则以及分布式架构下的关键设计等内容。
目录
[套装书具体书目]
8075562 - 中台架构与实现:基于DDD和微服务 - 9787111666301 - 机械工业出版社 - 定价 89
8079753 - 深入实践DDD:以DSL驱动复杂软件开发 - 9787111677710 - 机械工业出版社 - 定价 99



---------------------------8079753 - 深入实践DDD:以DSL驱动复杂软件开发---------------------------


前 言
第一部分 概念
第1章 DDD 的关键概念 2
1.1 自顶而下、逐步求精 3
1.1.1 DDD开创全新分析流派 3
1.1.2 什么是软件的核心复杂性 4
1.2 什么是领域模型 4
1.3 战术层面的关键概念 6
1.3.1 实体 6
1.3.2 值对象 6
1.3.3 聚合与聚合根、聚合内部实体 7
1.3.4 聚合的整体与局部 9
1.3.5 聚合是数据修改的单元 9
1.3.6 聚合分析是“拆分”的基础 10
1.3.7 服务 12
1.4 战略层面的关键概念 13
1.4.1 限界上下文 13
1.4.2 限界上下文与微服务 14
1.4.3 防腐层 15
1.4.4 统一语言 18
1.5 ER 模型、OO模型和关系模型 19
1.6 概念建模与模型范式 21
第2章 其他DDD相关概念 22
2.1 领域 ID 22
2.1.1 自然键与代理键 23
2.1.2 DDD 实体的 ID 需要被最终用户看到 23
2.1.3 什么时候使用代理键 24
2.2 ID、Local ID 与 Global ID 26
2.3 命令、事件与状态 27
第3章 CQRS 与 Event Sourcing 29
3.1 命令查询职责分离 29
3.2 事件溯源 32
3.3 From-Thru 模式 33
3.3.1 示例:ProductPrice 33
3.3.2 示例:PartyRelationship 35
3.4 CQRS、ES 与流处理 36
第二部分 设计
第4章 DDD 的 DSL是什么 40
4.1 为什么 DDD 需要 DSL 41
4.1.1 为什么实现 DDD 那么难 41
4.1.2 搞定 DDD 的“锤子”在哪里 42
4.2 需要什么样的 DSL 43
4.2.1 在“信仰”上保持中立 44
4.2.2 DDD 原生 45
4.2.3 在复杂和简单中平衡 46
4.2.4 通过 DSL 重塑软件开发过程 48
4.3 DDDML——DDD 的 DSL 48
4.3.1 DDDML 的词汇表 49
4.3.2 DDDML 的 Schema 51
4.4 DDDML 示例:Car 52
4.4.1 “对象”的名称在哪里 55
4.4.2 使用两种命名风格:camelCase 与 PascalCase 55
4.4.3 为何引入关键字 itemType 56
第5章 限界上下文 57
5.1 DDDML 文档的根结点下有什么 57
5.2 限界上下文的配置 59
5.3 名称空间 62
5.3.1 再谈 PascalCase 命名风格 62
5.3.2 注意两个字母的首字母缩写词 63
5.4 关于模块 64
第6章 值对象 67
6.1 领域基础类型 68
6.1.1 例子:从 OFBiz 借鉴过来的类型系统 70
6.1.2 例子:任务的触发器 73
6.2 数据值对象 75
6.3 枚举对象 76
第7章 聚合与实体 79
7.1 用同一个结点描述聚合及聚合根 79
7.2 实体之间只有一种基本关系 82
7.3 关于实体的 ID 85
7.4 不变的实体 89
7.5 动态对象 90
7.6  继承与多态 92
7.6.1 使用关键字 inheritedFrom 94
7.6.2 超对象 95
7.7 引用 97
7.7.1 定义实体的引用 97
7.7.2 属性的类型与引用类型 101
7.8 基本属性与派生属性 102
7.8.1 类型为实体集合的派生属性 103
7.8.2 类型为值对象的派生属性 106
7.9 约束 107
7.9.1 在实体层面的约束 107
7.9.2 在属性层面的约束 109
7.10 提供扩展点 110
第8章 超越数据模型 112
8.1 实体的方法 112
8.1.1 聚合根的方法 115
8.1.2 非聚合根实体的方法 116
8.1.3 属性的命令 117
8.1.4 命令 ID 与请求者 ID 119
8.2 记录业务逻辑 119
8.2.1 关于 accountingQuantityTypes 120
8.2.2 关于 derivationLogic 120
8.2.3 关于 filter 121
8.2.4 使用关键字referenceFilter 121
8.2.5 业务逻辑代码中的变量 122
8.2.6 说说区块链 123
8.3 领域服务 123
8.4 在方法定义中使用关键字 inheritedFrom 125
8.5 方法的安全性 126
第9章 模式 128
9.1 账务模式 128
9.2 状态机模式 132
9.3 树结构模式 137
9.3.1 简单的树 137
9.3.2 使用关键字structureType 138
9.3.3 使用关键字structureTypeFilter 139
第三部分 实践
第10章 处理限界上下文与值对象 142
10.1 项目文件 143
10.2 处理值对象 144
10.2.1 一个需要处理的数据值对象示例 145
10.2.2 使用 Hibernate 存储数据值对象 146
10.2.3 处理值对象的集合 149
10.2.4 在 URL 中使用数据值对象 151
10.2.5 处理领域基础类型 153
第11章 处理聚合与实体 161
11.1 生成聚合的代码 162
11.1.1 接口 163
11.1.2 代码中的命名问题 178
11.1.3 接口的实现 179
11.1.4 事件存储与持久化 207
11.1.5 使用 Validation 框架 218
11.1.6 保证静态方法与模型同步更新 220
11.1.7 不使用事件溯源 222
11.2 Override 聚合对象的方法 223
11.3 处理继承 225
11.3.1 TPCH 226
11.3.2 TPCC 227
11.3.3 TPS 228
11.4 处理模式 229
11.4.1 处理账务模式 229
11.4.2 处理状态机模式 234
第12章 处理领域服务 238
12.1 处理数据的一致性 239
12.1.1 使用数据库事务实现一致性 240
12.1.2 使用 Saga 实现最终一致性 241
12.2 发布与处理领域事件 243
12.2.1 编写 DDDML 文档 243
12.2.2 生成的事件发布代码 245
12.2.3 编写生产端聚合的业务逻辑 253
12.2.4 实现消费端领域事件的处理 254
12.3 支持基于编制的 Saga 255
12.3.1 编写 DDDML 文档 255
12.3.2 生成的 Saga 命令处理代码 261
12.3.3 需要我们编写的 Saga 代码 268
12.3.4 需要我们实现的实体方法 273
第13章 RESTful API 276
13.1 RESTful API 的最佳实践 276
13.1.1 没有必要绞尽脑汁地寻找名词 277
13.1.2 尽可能使用 HTTP作为封包 277
13.1.3 异常处理 279
13.2 聚合的 RESTful API 280
13.2.1 GET 280
13.2.2 PUT 291
13.2.3 PATCH 293
13.2.4 DELETE 295
13.2.5 POST 295
13.2.6 事件溯源 API 296
13.2.7 树的查询接口 297
13.3 服务的 RESTful API 297
13.4 身份与访问管理 299
13.4.1 获取 OAuth 2.0 Bearer Token 299
13.4.2 在资源服务器上处理授权 301
13.5 生成 Client SDK 302
13.5.1 创建聚合实例 303
13.5.2 更新聚合实例 304
13.5.3 使用 Retrofit2 306
第14章 直达 UI 308
14.1 两条路线的斗争 309
14.1.1 前端“知道”领域模型 309
14.1.2 前端“只知道”RESTful API 312
14.2 生成 Admin UI 312
14.2.1 使用 referenceFilter 313
14.2.2 展示派生的实体集合属性 315
14.2.3 使用属性层面的约束 316
14.2.4 使用 UI 层元数据 317
14.2.5 构建更实时的应用 318
第四部分 建模漫谈与 DDD 随想
第15章 找回敏捷的软件设计 322
15.1 重构不是万能灵药 323
15.2 数据建模示例:订单的装运与支付 324
15.2.1 订单与订单行项 325
15.2.2 订单与订单装运组 327
15.2.3 订单与装运单 328
15.2.4 订单的项目发货 329
15.2.5 订单的支付 330
15.3 中台是一个轮回 332
15.4 实例化需求与行为驱动测试 334
15.4.1  什么是实例化需求 334
15.4.2 BDD 工具 335
15.4.3 BDD 工具应与 DDD 相得益彰 336
15.4.4 不要在验收测试中使用固件数据 336
15.4.5 制造“制造数据”的工具 337
15.5 要领域模型驱动,不要 UI 驱动 345
15.6 不要用“我”的视角设计核心模型 346
15.6.1 让 User 消失 347
15.6.2 认识一下 Party 348
15.7 我们想要的敏捷设计 350
第16章 说说 SaaS 351
16.1 何为 SaaS 351
16.2 多租户技术 352
16.3 构建成功的 SaaS 有何难 353
16.3.1 多租户系统的构建成本 353
16.3.2 难以满足的定制化需求 353
16.3.3 负重前行的传统软件公司 355
16.4 SaaS 需要 DDD 355
第17章 更好的“锤子” 356
17.1 我们制作的一个 DDDML GUI 工具 357
17.1.1 给领域建模提供起点 357
17.1.2 创建新的限界上下文 358
17.1.3 从 OFBiz 中“借鉴”数据模型 359
17.1.4 构建项目并运行应用 361
17.1.5 使用 HTTP PUT 方法创建实体 362
17.1.6 给聚合增加方法 363
17.1.7 生成限界上下文的Demo Admin UI 368
17.1.8 让不同层级的开发人员各尽其能 369
17.2 以统一语言建模 370
附录 DDDML 示例与缩写表 373



---------------------------8075562 - 中台架构与实现:基于DDD和微服务---------------------------


序1
序2 为不确定而架构
前言
绪论 1
第一部分 认识中台
第1章 数字化中台初步认识与建设策略 13
1.1 平台是中台吗 13
1.2 中台到底是什么 14
1.3 传统企业中台的建设策略 15
1.4 如何实现前中后台的协同 17
1.4.1 前台 17
1.4.2 中台 18
1.4.3 后台 19
1.5 本章小结 20
第2章 企业中台能力框架 21
2.1 中台能力总体框架 21
2.2 业务中台 22
2.3 数据中台 23
2.4 技术中台 25
2.5 研发运营 28
2.6 云平台 29
2.7 能力聚合 29
2.8 组织架构及中台建设方法 30
2.9 本章小结 31
第3章 微服务设计为什么要选择DDD 32
3.1 软件架构的演进史 32
3.2 微服务拆分和设计的困境 34
3.3 为什么DDD适合微服务 35
3.4 本章小结 37
第4章 DDD、中台和微服务的关系 39
4.1 DDD和中台的本质 40
4.2 DDD、中台和微服务的协作 41
4.3 如何完成中台业务建模 43
4.4 本章小结 46
第二部分 DDD基本原理
第5章 领域和子域:有效分解问题域 49
5.1 领域的基本概念 49
5.2 领域的分解过程 50
5.3 子域的分类和属性 52
5.4 本章小结 53
第6章 限界上下文:定义领域边界的利器 54
6.1 什么是通用语言 54
6.2 什么是限界上下文 57
6.3 进一步理解限界上下文 58
6.4 限界上下文和微服务的关系 59
6.5 限界上下文与子域的关系 60
6.6 本章小结 61
第7章 实体和值对象:领域模型的基础单元 62
7.1 实体 62
7.2 值对象 64
7.3 实体和值对象的关系 68
7.4 本章小结 69
第8章 聚合和聚合根:怎样设计聚合 70
8.1 聚合 70
8.2 聚合根 71
8.3 聚合的设计步骤 73
8.4 聚合的设计原则 74
8.5 聚合的设计模式 75
8.5.1 仓储模式 76
8.5.2 工厂模式 80
8.6 本章小结 81
第9章 领域事件:解耦微服务的关键 83
9.1 领域事件 83
9.1.1 微服务内的领域事件 84
9.1.2 微服务之间的领域事件 85
9.2 领域事件案例 85
9.3 领域事件驱动实现机制 86
9.4 领域事件运行机制 89
9.5 本章小结 90
第10章 DDD分层架构 91
10.1 什么是DDD分层架构 91
10.1.1 用户接口层 92
10.1.2 应用层 93
10.1.3 领域层 94
10.1.4 基础层 94
10.1.5 DDD分层架构的重要原则 95
10.2 DDD分层架构如何推动架构演进 95
10.2.1 微服务架构的演进 95
10.2.2 微服务内服务的演进 96
10.3 三层架构如何演进到DDD分层架构 97
10.4 本章小结 98
第11章 几种微服务架构模型对比分析 99
11.1 洋葱架构 99
11.2 六边形架构 100
11.3 三种微服务架构模型的对比和分析 101
11.4 从三种架构模型看中台和微服务设计 103
11.4.1 中台建设要聚焦领域模型 103
11.4.2 微服务要有合理的架构分层 104
11.4.3 应用逻辑与基础资源的解耦 105
11.5 本章小结 106
第三部分 中台领域建模与微服务设计
第12章 如何用事件风暴构建领域模型 109
12.1 事件风暴概述 110
12.2 基于事件风暴的领域建模 111
12.2.1 产品愿景分析 111
12.2.2 场景分析 112
12.2.3 领域建模 113
12.2.4 微服务拆分与设计 115
12.3 本章小结 116
第13章 如何用DDD重构中台业务模型 117
13.1 传统企业应用建设分析 117
13.2 如何避免重复造轮子 119
13.3 如何构建中台业务模型 119
13.3.1 自顶向下的策略 119
13.3.2 自底向上的策略 120
13.4 业务模型重构过程中的领域对象 126
13.5 本章小结 128
第14章 如何用DDD设计微服务代码模型 129
14.1 DDD分层架构与微服务代码模型 129
14.2 微服务代码模型 130
14.2.1 一级代码 130
14.2.2 各层代码 131
14.2.3 微服务总结构 134
14.3 本章小结 135
第15章 如何保证领域模型与代码模型一致 136
15.1 领域对象的整理 136
15.2 从领域模型到微服务落地 137
15.2.1 领域层的领域对象 138
15.2.2 应用层的领域对象 140
15.2.3 领域对象与代码对象的映射 142
15.3 本章小结 144
第16章 如何实现微服务的架构演进 145
16.1 演进式架构 145
16.2 我们设计的是微服务还是小单体 146
16.3 微服务边界的作用 147
16.4 正确理解微服务的边界 149
16.5 本章小结 149
第17章 服务和数据在微服务各层的协作 150
17.1 服务视图 150
17.1.1 服务的类型 150
17.1.2 服务的调用 151
17.1.3 服务的封装与组合 153
17.1.4 两种分层架构的服务依赖关系 155
17.2 数据视图 158
17.3 本章小结 160
第18章 基于DDD的微服务设计实例 161
18.1 项目基本信息 161
18.2 战略设计 161
18.2.1 产品愿景 162
18.2.2 场景分析 163
18.2.3 领域建模 165
18.2.4 微服务拆分 166
18.3 战术设计 167
18.3.1 分析微服务领域对象 167
18.3.2 设计微服务代码结构 171
18.4 后续的工作 173
18.5 本章小结 173
第19章 基于DDD的微服务代码详解 174
19.1 项目背景 174
19.2 聚合中的对象 175
19.2.1 聚合根 175
19.2.2 实体 176
19.2.3 值对象 177
19.2.4 领域服务 177
19.3 领域事件 180
19.3.1 领域事件基类 181
19.3.2 领域事件实体 181
19.3.3 领域事件的执行逻辑 181
19.3.4 领域事件数据持久化 182
19.4 仓储模式 182
19.4.1 DO与PO对象的转换 183
19.4.2 仓储实现逻辑 184
19.5 工厂模式 186
19.6 服务的组合与编排 188
19.7 微服务拆分时的代码调整 190
19.7.1 微服务拆分前的代码 190
19.7.2 微服务拆分后的代码 191
19.8 服务接口的提供 192
19.8.1  facade接口 192
19.8.2 DTO数据组装 193
19.9 微服务解耦策略小结 195
19.10 本章小结 196
第四部分 前端设计
第20章 微前端架构理念与技术实践 198
20.1 前端项目的困局 198
20.2 如何理解微前端 200
20.3 微前端会带来哪些好处 201
20.4 微前端适合你的项目吗 202
20.5 微前端的实施方案与实践 203
20.5.1 Tailor实践 204
20.5.2 Single-SPA实践 216
20.6 本章小结 224
第21章 微前端:微服务的最佳搭档 225
21.1 前端应用新趋势 225
21.2 业务单元设计 226
21.3 微前端的集成 228
21.4 团队职责边界 230
21.5 本章小结 232
第五部分 中台设计案例
第22章 中台战略下的保险订单化设计 234
22.1 保险为什么要订单化销售 234
22.2 保险业务的复杂性 235
22.2.1 保险与普通商品差异分析 235
22.2.2 业务复杂性分析 237
22.2.3 技术复杂性分析 237
22.3 设计目标、思路和原则 239
22.4 业务中台领域建模 240
22.4.1 分解业务领域 240
22.4.2 核心能力中台 241
22.4.3 通用能力中台 244
22.5 业务单元化设计 251
22.5.1 单元化设计的前提 252
22.5.2 如何进行单元化设计 253
22.6 业务的融合 257
22.6.1 企业级前台应用 258
22.6.2 业务和流程的融合 259
22.6.3 单元化的价值 262
22.7 中台与后台的解耦 263
22.8 数据的融合 265
22.8.1 在线数据服务 265
22.8.2 视图数据服务 265
22.9 本章小结 266
第六部分 总结
第23章 微服务拆分和设计原则 270
23.1 微服务的演进策略 270
23.2 不同场景下的微服务建设策略 271
23.2.1 新建系统 271
23.2.2 单体遗留系统 272
23.3 DDD使用误区 273
23.4 微服务设计原则 275
23.5 微服务拆分要考虑哪些因素 276
23.6 本章小结 277
第24章 分布式架构的关键设计 278
24.1 选择什么样的分布式数据库 278
24.2 如何设计数据库分库主键 279
24.3 数据库的数据同步和复制 279
24.4 跨库关联查询如何处理 280
24.5 如何处理高频热点数据 280
24.6 前后序业务数据的处理 281
24.7 数据中台与企业级数据集成 281
24.8 BFF与企业级业务编排和协同 282
24.9 分布式事务还是事件驱动机制 282
24.10 多中心多活设计 283
24.11 本章小结 283
结束语 284

推荐

车牌查询
桂ICP备20004708号-3