第一部分 技艺 3
第1章 命名 3
1.1命名的力量 3
1.2命名其实很难 4
1.3有意义的命名 5
1.3.1变量名 5
1.3.2函数名 5
1.3.3类名 6
1.3.4包名 7
1.3.5模块名 7
1.4保持一致性 7
1.4.1每个概念一个词 8
1.4.2使用对仗词 8
1.4.3后置限定词 9
1.4.4统一业务语言 10
1.4.5统一技术语言 10
1.5自明的代码 10
1.5.1中间变量 11
1.5.2设计模式语言 11
1.5.3小心注释 12
1.6命名工具 14
1.7本章小结 15
第2章 规范 16
2.1认知成本 16
2.2混乱的代价 17
2.3代码规范 18
2.3.1代码格式 18
2.3.2空行规范 19
2.3.3 命名规范 21
2.3.4日志规范 22
2.3.5异常规范 25
2.4埋点规范 28
2.5架构规范 30
2.6 防止破窗 30
2.7本章小结 31
第3章 函数 32
3.1什么是函数 32
3.2软件中的函数 33
3.3封装判断 33
3.4函数参数 34
3.5短小的函数 35
3.6职责单一 36
3.7精简辅助代码 37
3.7.1优化判空 37
3.7.2优化缓存判断 38
3.7.3优雅降级 39
3.8组合函数模式 40
3.9 SLAP 43
3.10函数式编程 48
3.11本章小结 49
第4章 设计原则 51
4.1 SOLID概览 51
4.2 SRP 52
4.3 OCP 53
4.4 LSP 54
4.4.1警惕instanceof 55
4.4.2子类覆盖父类函数 55
4.5 ISP 57
4.6 DIP 58
4.7 DRY 61
4.8 YAGNI 61
4.9 Rule of Three 62
4.10 KISS原则 62
4.11 POLA原则 63
4.12本章小结 63
第5章 设计模式 64
5.1模式 64
5.2 GoF 65
5.3拦截器模式 69
5.4插件模式 73
5.5管道模式 75
5.5.1链式管道 75
5.5.2流处理 78
5.6本章小结 79
第6章 模型 81
6.1什么是模型 81
6.1.1物理模型 82
6.1.2数学模型 82
6.1.3概念模型 82
6.1.4思维模型 83
6.1.5模型不能代替现实 83
6.2 UML 84
6.3类图 85
6.3.1类的UML表示法 86
6.3.2类的关联关系 87
6.3.3类的依赖关系 92
6.3.4类的泛化关系 93
6.3.5接口与实现关系 94
6.4领域模型 95
6.5敏捷建模 96
6.6 广义模型 97
6.6.1 C4模型 97
6.6.2 UI流程图 97
6.6.3业务模型 98
6.7本章小结 99
第7章 DDD的精髓 101
7.1什么是DDD 101
7.2初步体验DDD 102
7.3 数据驱动和领域驱动 104
7.3.1数据驱动 104
7.3.2领域驱动 106
7.3.3 O R M 108
7.4 DDD的优势 109
7.4.1统一语言 110
7.4.2面向对象 110
7.4.3业务语义显性化 111
7.4.4分离业务逻辑和技术细节 111
7.5 DDD的核心概念 112
7.5.1领域实体 112
7.5.2聚合根 114
7.5.3领域服务 115
7.5.4领域事件 116
7.5.5 边界上下文 117
7.6领域建模方法 118
7.6.1用例分析法 118
7.6.2四色建模法 121
7.7模型演化 127
7.8为什么DDD饱受争议 127
7.8.1照搬概念 128
7.8.2抽象的灵活性 128
7.8.3领域层的边界 128
7.9本章小结 130
第二部分 思想 133
第8章 抽象 133
8.1伟大的抽象 133
8.2到底什么是抽象 134
8.3抽象是OO的基础 135
8.4抽象的层次性 136
8.5如何进行抽象 137
8.5.1寻找共性 137
8.5.2提升抽象层次 139
8.5.3构筑金字塔 142
8.6如何提升抽象思维 143
8.6.1多阅读 144
8.6.2多总结 144
8.6.3领域建模训练 145
8.7本章小结 145
第9章 分治 146
9.1分治算法 146
9.1.1归并排序 147
9.1.2二分搜索 148
9.1.3 K选择问题 149
9.2函数分解 150
9.3写代码的两次创造 150
9.3.1第一遍实现功能 150
9.3.2第二遍重构优化 151
9.4分治模式 151
9.5 分层设计 152
9.5.1分层网络模型 152
9.5.2分层架构 153
9.6 横切和竖切 154
9.7本章小结 155
第10章 技术人的素养 156
10.1不教条 156
10.1.1瀑布还是敏捷 157
10.1.2贫血还是充血 158
10.1.3单体还是分布式 159
10.2批判性思维 161
10.3成长型思维 162
10.4结构化思维 163
10.4.1如何落地新团队 165
10.4.2如何做晋升述职 166
10.5工具化思维 167
10.6好奇心 169
10.7记笔记 170
10.8有目标 171
10.9选择的自由 172
10.10平和的心态 173
10.11精进 174
10.12本章小结 174
第11章 技术Leader的修养 175
11.1技术氛围 175
11.1.1代码好坏味道 176
11.1.2技术分享 176
11.1.3 CR周报 177
11.1.4读书会 178
11.2目标管理 179
11.2.1什么是OKR 179
11.2.2 SMART原则 180
11.2.3 OKR设定 181
11.3技术规划 182
11.3.1当前问题 182
11.3.2技术领域 183
11.3.3业务领域 183
11.3.4团队特色 183
11.4推理阶梯 184
11.5 Leader和Manager的区别 185
11.6视人为人 186
11.7本章小结 187
第三部分 实践 191
第12章 COLA架构 191
12.1软件架构 191
12.2典型的应用架构 193
12.2.1分层架构 193
12.2.2 CQRS 195
12.2.3六边形架构 196
12.2.4 洋葱架构 198
12.2.5 DDD 199
12.3 COLA架构设计 200
12.3.1分层设计 200
12.3.2扩展设计 201
12.3.3规范设计 205
12.3.4 COLA Archetype 208
12.4 COLA测试 209
12.4.1单元测试 209
12.4.2集成测试 210
12.4.3 ColaMock 210
12.5 COLA架构总览 212
12.6本章小结 214
第13章 工匠平台 215
13.1项目背景 215
13.2整理需求 216
13.3工匠Demo 217
13.4使用COLA 218
13.4.1安装COLA 218
13.4.2搭建应用 218
13.5领域模型 219
13.5.1领域建模 219
13.5.2领域词汇表 221
13.6核心业务逻辑 222
13.7实现技术细节 227
13.7.1数据存储 227
13.7.2控制器 228
13.8测试 229
13.8.1单元测试 229
13.8.2集成测试 230
13.8.3回归测试 231
13.9 本章小结 232