复杂软件设计之道 | PDF下载|ePub下载
类别: 计算机
作者:[美] Gayle Laakmann McDowell
出版社: 人民邮电出版社
原作名: Cracking the coding interview:150 programming questions and solutions,fifth edition
译者:李琳骁/漆犇
出版年: 2013-11
页数: 372
定价: 59.00元
装帧: 平装
ISBN: 9787115332912
出版社: 人民邮电出版社
原作名: Cracking the coding interview:150 programming questions and solutions,fifth edition
译者:李琳骁/漆犇
出版年: 2013-11
页数: 372
定价: 59.00元
装帧: 平装
ISBN: 9787115332912
内容简介 · · · · · ·
领域驱动设计简称DDD,《复杂软件设计之道:领域驱动设计全面解析与实战》前6章全面解析了DDD的分析方法和技术架构,包括领域驱动设计基础、领域驱动战略设计(有界上下文和统一语言)、聚合设计、实体和值对象、CQRS架构和事件溯源,第7章使用经典的货物运输系统案例进行了完整、详细的综合演示。
《复杂软件设计之道:领域驱动设计全面解析与实战》同时引入了DDD的*新发展成果,如事件风暴建模,并以此建模方式替代传统的DDD建模方式讲解了多个案例。还涉及大量软件系统实现相关的技术和架构,读者在学习DDD的同时,也可以掌握这些技术、架构在DDD实现中的灵活应用。
另外,每个概念或方法的讲解过程都穿插了具体实例,以方便读者结合实例进行学习;第2~7章每章*后都有总结与拓展,将本章涉及的案例和知识进行总结,并引入国际DDD专家的心得经验,试图告诉读者一条DDD实战中行之有效的途径。
《复杂软件设计之道:领域驱动设计全面解析与实战》主要面向拥有一定实践经验的软件产品经理、领域专家、软件设计开发相关从业人员,相关初级从业者也可阅读本书。
作者简介 · · · · · ·
作者彭晨阳,常用网名板桥(bang),DDD等软件架构专研网站——解道(Jdon)的创办者,长期关注国内外软件架构思想和设计开发的新动向,自DDD提出以来,持续研究与实践DDD。
行业经验——具有近30年的软件系统设计与开发经验,以及丰富的领域实战经验,包括ERP、电子商务、政务、电力、银行、大型游戏等。
培训经历——致力于传播软件设计开发新思想、新技术,曾为近百家企业提供培训咨询服务,包括华为、阿里等企业。
擅长方向——系统架构设计与实现,设计模式与框架,并发编程和微服务、区块链等分布式系统与事务。擅长复杂系统的软件架构和领域建模。
目录 · · · · · ·
前言
第1章 领域驱动设计基础 1
1.1 领域驱动设计的起源与发展 1
1.1.1 程序员为难之处 1
1.1.2 技术负债与软件质量 3
1.1.3 ER数据建模与面向对象建模 4
1.1.4 DDD的诞生和发展 6
1.2 领域驱动设计的特点 9
1.2.1 发现和理解问题 10
1.2.2 领域即边界 13
1.2.3 解决复杂性 15
1.2.4 新的数据结构设计方式 17
1.2.5 需要注重产品的程序员 18
1.3 领域驱动设计的难点 20
1.3.1 业务策略和业务规则 21
1.3.2 统一语言与有界上下文 25
1.3.3 领域模型的提炼 26
1.4 领域驱动设计的应用场景 29
1.4.1 哪些应用不适合 30
1.4.2 适合微服务架构 30
第2章 领域驱动战略设计 31
2.1 有界上下文 31
2.1.1 统一语言:统一项目中的交流语言 32
2.1.2 如何发现有界上下文和统一语言? 34
2.1.3 有界上下文之间的关系 36
2.1.4 核心子域、支持子域与通用子域 37
2.1.5 实例解析:电费结算系统 38
2.2 按时间线发现有界上下文 40
2.2.1 UML时序图 40
2.2.2 实例解析:电商领域之商品管理上下文 41
2.3 通过领域故事或流程发现有界上下文 45
2.4 通过事件风暴会议发现有界上下文 48
2.4.1 领域事件 50
2.4.2 命令 51
2.4.3 事件风暴建模法 53
2.4.4 实例解析:一个典型的事件风暴建模议程 56
2.5 业务平台与中台设计 60
2.6 总结与拓展 62
第3章 聚合设计 68
3.1 聚合设计的概念 68
3.1.1 高聚合低关联 71
3.1.2 聚合的逻辑一致性 74
3.2 设计聚合的几种方法 77
3.2.1 改变主谓宾顺序 78
3.2.2 根据领域事件设计聚合 79
3.2.3 根据单一职责设计聚合 81
3.2.4 按时间边界设计聚合 83
3.2.5 通过事务边界设计聚合 87
3.2.6 通过ER模型设计聚合 89
3.3 实例解析:订单系统中的聚合设计 95
3.3.1 信息拥有者模式 97
3.3.2 引用模式 99
3.3.3 奥卡姆剃刀原理 100
3.3.4 控制者模式 101
3.3.5 订单状态集中控制实现 103
3.3.6 做什么和怎么做的分离 106
3.3.7 在服务中验证聚合 107
3.3.8 Spring Boot实现 110
3.4 总结与拓展 115
第4章 实体和值对象 121
4.1 失血/贫血模型 121
4.2 实体 124
4.2.1 实体的标识 125
4.2.2 实体的设计 126
4.2.3 实体对象的创建 128
4.3 值对象 131
4.3.1 值对象与实体的区别 134
4.3.2 用值对象重构 138
4.4 领域服务 140
4.4.1 领域服务的特征 141
4.4.2 领域服务与应用服务 144
4.5 仓储 147
4.5.1 自行实现仓储 148
4.5.2 结合Builder模式实现仓储 151
4.6 充血模型的设计原则 154
4.6.1 将公有setter方法变为私有 155
4.6.2 注重对象的构建 157
4.7 实例解析:论坛系统实体和值对象设计 159
4.7.1 聚合根实体是什么? 161
4.7.2 值对象的设计 164
4.7.3 状态设计 167
4.7.4 发帖功能实现 170
4.7.5 双聚合根 173
4.7.6 分配职责行为 176
4.7.7 构建对象必须遵循唯一性 179
4.8 总结与拓展 184
第5章 CQRS架构 186
5.1 DDD架构介绍 187
5.1.1 MVC模式 187
5.1.2 传统三层架构 188
5.1.3 传统DDD分层架构 191
5.1.4 清洁架构 194
5.1.5 六边形架构 198
5.1.6 垂直切片架构 201
5.2 CQRS架构的特点 203
5.3 命令和查询分离 205
5.3.1 查询模型实现 206
5.3.2 命令模型实现 210
5.3.3 Command对象 212
5.3.4 命令和查询的协作 216
5.4 不同的数据访问方式 219
5.4.1 查询端存储实现 220
5.4.2 规格模式 221
5.4.3 命令与查询的同步 224
5.5 CAP定理 226
5.6 领域事件实现数据同步 227
5.7 实例解析:使用Axon框架实现CQRS 231
5.7.1 命令端实现 233
5.7.2 查询端实现 236
5.8 总结与拓展 237
第6章 事件溯源 241
6.1 什么是事件溯源? 242
6.2 基于事件溯源的聚合根设计 249
6.2.1 用事件替代状态 249
6.2.2 活动与事件 253
6.3 事件溯源的优点 260
6.3.1 替代分布式事务 261
6.3.2 事件日志的顺序性 263
6.3.3 基于事件日志的消息系统 265
6.4 微服务中的分布式事务实现 266
6.4.1 引入Saga模式 267
6.4.2 Saga分布式事务原理 267
6.4.3 实例解析:账户转账 271
6.5 使用Apache Kafka实现事件溯源 275
6.6 投射模式 280
6.7 更改数据捕获(CDC) 282
6.8 总结与拓展 285
第7章 货物运输系统 290
7.1 领域描述 290
7.2 从流程中发现领域事件 294
7.2.1 受理流程 295
7.2.2 作业流程 298
7.3 概念挖掘 301
7.3.1 划分有界上下文 302
7.3.2 预订受理上下文 304
7.3.3 运输作业上下文 306
7.4 预订受理的聚合设计 309
7.4.1 聚合的发现和命名 309
7.4.2 聚合设计 313
7.4.3 状态设计 316
7.4.4 命令与事件设计 317
7.4.5 代码实现 320
7.4.6 设计和实现的差异 325
7.5 运输作业的聚合设计 327
7.5.1 命令、事件和聚合 328
7.5.2 有界上下文映射 331
7.5.3 聚合重构设计 334
7.6 总结与拓展336
· · · · · ·
第1章 领域驱动设计基础 1
1.1 领域驱动设计的起源与发展 1
1.1.1 程序员为难之处 1
1.1.2 技术负债与软件质量 3
1.1.3 ER数据建模与面向对象建模 4
1.1.4 DDD的诞生和发展 6
1.2 领域驱动设计的特点 9
1.2.1 发现和理解问题 10
1.2.2 领域即边界 13
1.2.3 解决复杂性 15
1.2.4 新的数据结构设计方式 17
1.2.5 需要注重产品的程序员 18
1.3 领域驱动设计的难点 20
1.3.1 业务策略和业务规则 21
1.3.2 统一语言与有界上下文 25
1.3.3 领域模型的提炼 26
1.4 领域驱动设计的应用场景 29
1.4.1 哪些应用不适合 30
1.4.2 适合微服务架构 30
第2章 领域驱动战略设计 31
2.1 有界上下文 31
2.1.1 统一语言:统一项目中的交流语言 32
2.1.2 如何发现有界上下文和统一语言? 34
2.1.3 有界上下文之间的关系 36
2.1.4 核心子域、支持子域与通用子域 37
2.1.5 实例解析:电费结算系统 38
2.2 按时间线发现有界上下文 40
2.2.1 UML时序图 40
2.2.2 实例解析:电商领域之商品管理上下文 41
2.3 通过领域故事或流程发现有界上下文 45
2.4 通过事件风暴会议发现有界上下文 48
2.4.1 领域事件 50
2.4.2 命令 51
2.4.3 事件风暴建模法 53
2.4.4 实例解析:一个典型的事件风暴建模议程 56
2.5 业务平台与中台设计 60
2.6 总结与拓展 62
第3章 聚合设计 68
3.1 聚合设计的概念 68
3.1.1 高聚合低关联 71
3.1.2 聚合的逻辑一致性 74
3.2 设计聚合的几种方法 77
3.2.1 改变主谓宾顺序 78
3.2.2 根据领域事件设计聚合 79
3.2.3 根据单一职责设计聚合 81
3.2.4 按时间边界设计聚合 83
3.2.5 通过事务边界设计聚合 87
3.2.6 通过ER模型设计聚合 89
3.3 实例解析:订单系统中的聚合设计 95
3.3.1 信息拥有者模式 97
3.3.2 引用模式 99
3.3.3 奥卡姆剃刀原理 100
3.3.4 控制者模式 101
3.3.5 订单状态集中控制实现 103
3.3.6 做什么和怎么做的分离 106
3.3.7 在服务中验证聚合 107
3.3.8 Spring Boot实现 110
3.4 总结与拓展 115
第4章 实体和值对象 121
4.1 失血/贫血模型 121
4.2 实体 124
4.2.1 实体的标识 125
4.2.2 实体的设计 126
4.2.3 实体对象的创建 128
4.3 值对象 131
4.3.1 值对象与实体的区别 134
4.3.2 用值对象重构 138
4.4 领域服务 140
4.4.1 领域服务的特征 141
4.4.2 领域服务与应用服务 144
4.5 仓储 147
4.5.1 自行实现仓储 148
4.5.2 结合Builder模式实现仓储 151
4.6 充血模型的设计原则 154
4.6.1 将公有setter方法变为私有 155
4.6.2 注重对象的构建 157
4.7 实例解析:论坛系统实体和值对象设计 159
4.7.1 聚合根实体是什么? 161
4.7.2 值对象的设计 164
4.7.3 状态设计 167
4.7.4 发帖功能实现 170
4.7.5 双聚合根 173
4.7.6 分配职责行为 176
4.7.7 构建对象必须遵循唯一性 179
4.8 总结与拓展 184
第5章 CQRS架构 186
5.1 DDD架构介绍 187
5.1.1 MVC模式 187
5.1.2 传统三层架构 188
5.1.3 传统DDD分层架构 191
5.1.4 清洁架构 194
5.1.5 六边形架构 198
5.1.6 垂直切片架构 201
5.2 CQRS架构的特点 203
5.3 命令和查询分离 205
5.3.1 查询模型实现 206
5.3.2 命令模型实现 210
5.3.3 Command对象 212
5.3.4 命令和查询的协作 216
5.4 不同的数据访问方式 219
5.4.1 查询端存储实现 220
5.4.2 规格模式 221
5.4.3 命令与查询的同步 224
5.5 CAP定理 226
5.6 领域事件实现数据同步 227
5.7 实例解析:使用Axon框架实现CQRS 231
5.7.1 命令端实现 233
5.7.2 查询端实现 236
5.8 总结与拓展 237
第6章 事件溯源 241
6.1 什么是事件溯源? 242
6.2 基于事件溯源的聚合根设计 249
6.2.1 用事件替代状态 249
6.2.2 活动与事件 253
6.3 事件溯源的优点 260
6.3.1 替代分布式事务 261
6.3.2 事件日志的顺序性 263
6.3.3 基于事件日志的消息系统 265
6.4 微服务中的分布式事务实现 266
6.4.1 引入Saga模式 267
6.4.2 Saga分布式事务原理 267
6.4.3 实例解析:账户转账 271
6.5 使用Apache Kafka实现事件溯源 275
6.6 投射模式 280
6.7 更改数据捕获(CDC) 282
6.8 总结与拓展 285
第7章 货物运输系统 290
7.1 领域描述 290
7.2 从流程中发现领域事件 294
7.2.1 受理流程 295
7.2.2 作业流程 298
7.3 概念挖掘 301
7.3.1 划分有界上下文 302
7.3.2 预订受理上下文 304
7.3.3 运输作业上下文 306
7.4 预订受理的聚合设计 309
7.4.1 聚合的发现和命名 309
7.4.2 聚合设计 313
7.4.3 状态设计 316
7.4.4 命令与事件设计 317
7.4.5 代码实现 320
7.4.6 设计和实现的差异 325
7.5 运输作业的聚合设计 327
7.5.1 命令、事件和聚合 328
7.5.2 有界上下文映射 331
7.5.3 聚合重构设计 334
7.6 总结与拓展336
· · · · · ·
发表回复
要发表评论,您必须先登录。