目 录
第 1 部分 基础
第 1 章 今 天的架构师和架构...............................................................................................................2
1.1 软件架构到底是什么........................................................................................................................2
1.1.1 把架构原则应用到软件中..................................................................................................3
1.1.2 确认需求.................................................................................................................................5
1.1.3 什么是架构,什么不是......................................................................................................8
1.1.4 架构流程...............................................................................................................................10
1.2 谁是架构师.......................................................................................................................................12
1.2.1 架构师的职责......................................................................................................................12
1.2.2 架构师的角色......................................................................................................................14
1.2.3 关于架构师的常见误解....................................................................................................15
1.3 总结....................................................................................................................................................17
1.4 笑到**后............................................................................................................................................17
第 2 章 为成功而设计.............................................................................................................................18
2.1 “大泥球”..........................................................................................................................................18
2.1.1 “大泥球”的成因.............................................................................................................19
2.1.2 “大泥球”的征兆................................................................................................................21
2.1.3 使用指标检测BBM...........................................................................................................23
2.2 软件项目的机制..............................................................................................................................24
2.2.1 组织文化...............................................................................................................................24
2.2.2 帮助团队更好地写代码....................................................................................................26
2.3 走出混乱............................................................................................................................................29
2.3.1 有一种奇怪的东西叫作“遗留代码” ............................................................................30
2.3.2 在3 招之内将杀(checkmate)......................................................................................30
2.3.3 决定是否添加人手.............................................................................................................33
2.4 总结....................................................................................................................................................34
2.5 笑到**后............................................................................................................................................35
第3 章 软件设计的原则.......................................................................................................................36
3.1 软件设计的通用原则......................................................................................................................36
3.1.1 从意大利面代码到千层饼代码.......................................................................................37
3.1.2 关注点分离..........................................................................................................................38
3.1.3 隔离.......................................................................................................................................39
3.2 面向对象设计...................................................................................................................................39
3.2.1 相关类...................................................................................................................................40
3.2.2 对接口编程..........................................................................................................................40
3.2.3 组合与继承..........................................................................................................................42
3.2.4 反思面向对象......................................................................................................................43
3.3 开发和设计向量..............................................................................................................................44
3.3.1 SOLID 原则.........................................................................................................................44
3.3.2 处理依赖的模式.................................................................................................................48
3.3.3 编码向量...............................................................................................................................50
3.3.4 使用模式...............................................................................................................................52
3.4 防御性编程.......................................................................................................................................54
3.4.1 “如果—那么—抛出”模式............................................................................................55
3.4.2 软件契约...............................................................................................................................55
3.5 总结....................................................................................................................................................59
3.6 笑到**后............................................................................................................................................59
第 4 章 编写优质软件.............................................................................................................................60
4.1 编写可测试代码的艺术.................................................................................................................60
4.1.1 什么是可测试性.................................................................................................................61
4.1.2 测试你的软件......................................................................................................................62
4.1.3 软件测试的常见实践.........................................................................................................69
4.2 代码可扩展性的实践......................................................................................................................73
4.2.1 基于接口的设计.................................................................................................................74
4.2.2 插件架构...............................................................................................................................74
4.2.3 状态机...................................................................................................................................74
4.3 写出别人看得懂的代码.................................................................................................................74
4.3.1 把可读性看作软件特性....................................................................................................75
4.3.2 一些改善可读性的实用规则............................................................................................77
4.4 总结....................................................................................................................................................79
4.5 笑到**后............................................................................................................................................79
第 2 部分 设计架构
第5 章 发现领域架构.............................................................................................................................82
5.1 领域驱动设计的真正附加价值....................................................................................................82
5.1.1 DDD 里有什么为我所用..................................................................................................83
5.1.2 使用DDD 开展分析..........................................................................................................83
5.1.3 策略模型设计......................................................................................................................84
5.2 统一语言............................................................................................................................................85
5.2.1 统一语言的目的.................................................................................................................85
5.2.2 统一语言的结构.................................................................................................................86
5.2.3 如何定义统一语言.............................................................................................................86
5.2.4 保持语言与模型同步.........................................................................................................87
5.3 绑定上下文.......................................................................................................................................88
5.3.1 发现上下文..........................................................................................................................88
5.3.2 把领域分割成绑定上下文................................................................................................89
5.3.3 上下文映射..........................................................................................................................91
5.3.4 给予每个上下文它自己的架构.......................................................................................92
5.4 分层架构............................................................................................................................................94
5.4.1 分层架构的起源.................................................................................................................94
5.4.2 表现层...................................................................................................................................96
5.4.3 应用程序层..........................................................................................................................96
5.4.4 领域层...................................................................................................................................98
5.4.5 基础设施层..........................................................................................................................98
5.5 总结....................................................................................................................................................98
5.6 笑到**后............................................................................................................................................99
第 6 章 表现层.......................................................................................................................................... 100
6.1 用户体验优先................................................................................................................................ 100
6.1.1 关注交互............................................................................................................................ 101
6.1.2 用户体验不是用户界面................................................................................................. 102
6.1.3 如何创建有效的体验...................................................................................................... 104
6.2 真实场景......................................................................................................................................... 107
6.2.1 ASP.NET 网站.................................................................................................................. 107
6.2.2 Web Forms 与ASP.NET MVC.......................................................................................111
6.2.3 给网站添加设备支持...................................................................................................... 113
6.2.4 单页应用程序................................................................................................................... 117
6.2.5 桌面富客户端................................................................................................................... 120
6.3 总结................................................................................................................................................. 122
6.4 笑到**后......................................................................................................................................... 122
第 7 章 神秘的业务层.......................................................................................................................... 123
7.1 用来组织业务逻辑的模式.......................................................................................................... 123
7.1.1 CRUD 童话与架构白马王子........................................................................................ 124
7.1.2 事务脚本模式................................................................................................................... 124
7.1.3 领域模型模式................................................................................................................... 127
7.1.4 贫血领域模型(反)模式............................................................................................. 128
7.2 把焦点从数据移到任务.............................................................................................................. 129
7.2.1 ASP.NET MVC 里的任务编排...................................................................................... 130
7.2.2 在领域里编排任务.......................................................................................................... 133
7.3 跨越边界传输数据....................................................................................................................... 134
7.3.1 分层架构里的数据流...................................................................................................... 134
7.3.2 共享领域模型实体.......................................................................................................... 135
7.3.3 使用数据传输对象.......................................................................................................... 136
7.4 总结................................................................................................................................................. 138
7.5 笑到**后......................................................................................................................................... 138
第 3 部分 支撑架构
第8 章 领域模型导论.......................................................................................................................... 140
8.1 从数据到行为的转变................................................................................................................... 140
8.1.1 模型和领域背后的基本原理......................................................................................... 140
8.1.2 数据库是基础设施.......................................................................................................... 142
8.2 领域层的内部................................................................................................................................ 143
8.2.1 领域模型............................................................................................................................ 143
8.2.2 聚合.................................................................................................................................... 145
8.2.3 领域服务............................................................................................................................ 150
8.2.4 领域事件............................................................................................................................ 152
8.2.5 横切关注点....................................................................................................................... 155
8.3 总结................................................................................................................................................. 157
8.4 笑到**后......................................................................................................................................... 157
第 9 章 实现领域模型.......................................................................................................................... 158
9.1 在线商店示例项目....................................................................................................................... 158
9.1.1 入选的用例....................................................................................................................... 158
9.1.2 入选的方案....................................................................................................................... 159
9.1.3 “买买买”项目的结构................................................................................................... 160
9.1.4 入选的技术....................................................................................................................... 161
9.1.5 在线商店的绑定上下文................................................................................................. 162
9.1.6 “买买买”应用程序的上下文映射.............................................................................. 163
9.2 领域建模实用指南....................................................................................................................... 164
9.2.1 行为是游戏规则的变革者............................................................................................. 164
9.2.2 实体的基架....................................................................................................................... 166
9.2.3 值对象的基架................................................................................................................... 169
9.2.4 标识聚合............................................................................................................................ 172
9.2.5 持久化模型....................................................................................................................... 179
9.3 实现业务逻辑................................................................................................................................ 182
9.3.1 查找订单............................................................................................................................ 183
9.3.2 下订单................................................................................................................................ 183
9.3.3 忠诚卡(或客户忠诚计划)......................................................................................... 187
9.4 总结................................................................................................................................................. 187
9.5 笑到**后......................................................................................................................................... 187
第 10 章 CQRS 导论............................................................................................................................ 188
10.1 分离命令与查询......................................................................................................................... 188
10.1.1 CQRS 模式概论............................................................................................................. 189
10.1.2 CQRS 的好处................................................................................................................. 190
10.1.3 在业务层里使用CQRS................................................................................................ 191
10.1.4 CQRS 总能胜任架构需要........................................................................................... 193
10.2 查询栈........................................................................................................................................... 194
10.2.1 读取领域模型................................................................................................................. 194
10.2.2 设计只读模型外观........................................................................................................ 196
10.2.3 分层表达式树................................................................................................................. 198
10.3 命令栈........................................................................................................................................... 202
10.3.1 回到表现层..................................................................................................................... 203
10.3.2 规范化命令和事件........................................................................................................ 205
10.3.3 处理命令和事件............................................................................................................ 207
10.3.4 现成的存储..................................................................................................................... 212
10.4 总结............................................................................................................................................... 214
10.5 笑到**后...................................................................................................................................... 214
第 11 章 实现CQRS............................................................................................................................ 215
11.1 CQRS 的实现.............................................................................................................................. 215
11.1.1 普通简单的CQRS......................................................................................................... 215
11.1.2 具有命令架构的CQRS................................................................................................ 217
11.2 实现查询栈.................................................................................................................................. 219
11.2.1 创建读取外观................................................................................................................. 219
11.2.2 为调用方打包数据........................................................................................................ 220
11.3 实现命令栈.................................................................................................................................. 224
11.3.1 奠定基础.......................................................................................................................... 224
11.3.2 通过命令编排用例........................................................................................................ 227
11.4 总结............................................................................................................................................... 230
11.5 笑到**后...................................................................................................................................... 230
第 12 章 事件溯源导论....................................................................................................................... 231
12.1 事件的突破.................................................................................................................................. 231
12.1.1 下一件大事(重装上阵)........................................................................................... 231
12.1.2 现实世界不仅有模型,还有事件.............................................................................. 232
12.1.3 抛弃“**近已知的正常状态” .................................................................................... 232
12.1.4 事件对软件架构的深刻影响...................................................................................... 234
12.2 事件源架构.................................................................................................................................. 236
12.2.1 持久化事件..................................................................................................................... 236
12.2.2 回放事件......................................................................................................................... 238
12.3 总结............................................................................................................................................... 240
12.4 笑到**后...................................................................................................................................... 240
第 13 章 实现事件溯源....................................................................................................................... 241
13.1 事件溯源:为何以及何时........................................................................................................ 241
13.1.1 为什么说事件溯源是一个资源.................................................................................. 242
13.1.2 事件溯源何时合适........................................................................................................ 243
13.2 带有回放的事件溯源................................................................................................................ 244
13.2.1 现场比分系统................................................................................................................. 244
13.2.2 系统的实现..................................................................................................................... 246
13.3 带有聚合快照的事件溯源........................................................................................................ 255
13.3.1 迷你企业资源规划系统............................................................................................... 256
13.3.2 系统的实现..................................................................................................................... 257
13.4 总结............................................................................................................................................... 2617
13.5 笑到**后...................................................................................................................................... 261
第 4 部分 基础设施
第 14 章 持久层....................................................................................................................................... 264
14.1 持久层概览.................................................................................................................................. 264
14.1.1 持久层的职责................................................................................................................. 264
14.1.2 仓储模式的设计............................................................................................................ 265
14.2 实现仓储...................................................................................................................................... 268
14.2.1 仓储的查询部分............................................................................................................ 268
14.2.2 持久化聚合..................................................................................................................... 271
14.2.3 存储技术......................................................................................................................... 272
14.3 为何你该考虑非关系型存储................................................................................................... 275
14.3.1 熟悉NoSQL ................................................................................................................... 276
14.3.2 你会得到什么,又会失去什么.................................................................................. 277
14.3.3 做出一个正确的选择................................................................................................... 280
14.4 总结............................................................................................................................................... 282
14.5 笑到**后...................................................................................................................................... 282