Chapter 1:重构,第一个示例 1
起点 1
对此起始程序的评价 3
重构的第一步 5
分解statement方法 6
进展:大量嵌套函数 22
拆分计算阶段与格式化阶段 24
进展:分离到两个文件(和两个阶段) 31
按类型重组计算过程 34
进展:使用多态计算器来提供数据 41
结语 43
Chapter 2:重构的原则 45
何谓重构 45
两顶帽子 46
为何重构 47
何时重构 50
重构的挑战 55
重构、架构和YAGNI 62
重构与软件开发过程 63
重构与性能 64
重构起源何处 67
自动化重构 68
延展阅读 70
Chapter 3:代码的坏味道 71
神秘命名 72
重复代码 72
过长函数 73
过长参数列表 74
全局数据 74
可变数据 75
发散式变化 76
霰弹式修改 76
依恋情结 77
数据泥团 78
基本类型偏执 78
重复的switch 79
循环语句 79
冗赘的元素 80
夸夸其谈通用性 80
临时字段 80
过长的消息链 81
中间人 81
内幕交易 82
过大的类 82
异曲同工的类 83
纯数据类 83
被拒绝的遗赠 83
注释 84
Chapter 4:构筑测试体系 85
自测试代码的价值 85
待测试的样例代码 87
第一个测试 90
再添加一个测试 93
修改测试夹具 95
探测边界条件 96
测试远不止如此 99
Chapter 5:介绍重构名录 101
重构的记录格式 101
挑选重构的依据 102
Chapter 6:第一组重构 105
提炼函数 106
内联函数 115
提炼变量 119
内联变量 123
改变函数声明 124
封装变量 132
变量改名 137
引入参数对象 140
函数组合成类 144
函数组合成变换 149
拆分阶段 154
Chapter 7:封装 161
封装记录 162
封装集合 170
以对象取代基本类型 174
以查询取代临时变量 178
提炼类 182
内联类 186
隐藏委托关系 189
移除中间人 192
替换算法 195
Chapter 8:搬移特性 197
搬移函数 198
搬移字段 207
搬移语句到函数 213
搬移语句到调用者 217
以函数调用取代内联代码 222
移动语句 223
拆分循环 227
以管道取代循环 231
移除死代码 237
Chapter 9:重新组织数据 239
拆分变量 240
字段改名 244
以查询取代派生变量 248
将引用对象改为值对象 252
将值对象改为引用对象 256
Chapter 10:简化条件逻辑 259
分解条件表达式 260
合并条件表达式 263
以卫语句取代嵌套条件表达式 266
以多态取代条件表达式 272
引入特例 289
引入断言 302
Chapter 11:重构API 305
将查询函数和修改函数分离 306
函数参数化 310
移除标记参数 314
保持对象完整 319
以查询取代参数 324
以参数取代查询 327
移除设值函数 331
以工厂函数取代构造函数 334
以命令取代函数 337
以函数取代命令 344
Chapter 12:处理继承关系 349
函数上移 350
字段上移 353
构造函数本体上移 355
函数下移 359
字段下移 361
以子类取代类型码 362
移除子类 369
提炼超类 375
折叠继承体系 380
以委托取代子类 381
以委托取代超类 399
参考文献 405