图书介绍

重构 Ruby版PDF|Epub|txt|kindle电子书版本网盘下载

重构 Ruby版
  • (美)Jay Fields,(美)Shane Harvie,(美)Martin Fowler等著 著
  • 出版社: 北京:机械工业出版社
  • ISBN:9787111300786
  • 出版时间:2010
  • 标注页数:297页
  • 文件大小:14MB
  • 文件页数:315页
  • 主题词:计算机网络-程序设计

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

重构 Ruby版PDF格式电子书版下载

下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。

建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!

(文件页数 要大于 标注页数,上中下等多册电子书除外)

注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具

图书目录

第1章 重构初体验1

1.1 起点1

1.1.1 Movie2

1.1.2 Rental2

1.1.3 Customer2

1.1.4 对起始程序的评价4

1.2 重构第一步5

1.3 Statement方法的分解和再组合5

1.3.1 移动Amount的计算9

1.3.2 提炼常客积分的计算12

1.3.3 移除临时变量15

1.4 用多态替换价格代码中的条件逻辑19

1.5 小结27

第2章 重构的基本原理28

2.1 重构的起源28

2.2 重构的定义29

2.3 重构的理由30

2.3.1 重构可以改进软件的设计30

2.3.2 重构让软件变得易于理解31

2.3.3 重构可以帮助你发现bug32

2.3.4 重构可以帮助你更快地编程32

2.4 重构的时机32

2.4.1 事不过三32

2.4.2 在添加功能时重构33

2.4.3 在需要修复bug时重构33

2.4.4 在进行代码复审时重构33

2.4.5 为了更好地理解而重构(或者说,向着同一个目标进行重构)34

2.5 为什么重构能起作用34

2.6 我怎么跟经理说35

2.7 抽象和重构36

2.8 重构的问题37

2.8.1 改变接口37

2.8.2 数据库38

2.8.3 难以重构的设计变化38

2.8.4 什么时候不应该重构39

2.9 重构和设计40

2.10 竹篮打水一场空41

2.11 重构和性能42

2.12 优化薪资系统43

第3章 代码里的坏味道44

3.1 重复代码44

3.2 方法过长45

3.3 类太大46

3.4 参数列表太长46

3.5 发散型变化47

3.6 霰弹型修改47

3.7 特性依赖47

3.8 数据泥团48

3.9 基本类型偏执48

3.10 case语句49

3.11 平行继承体系49

3.12 冗赘类49

3.13 纯臆测的泛化50

3.14 临时字段50

3.15 消息链50

3.16 中间人51

3.17 过分亲密51

3.18 异曲同工的类51

3.19 不完善的类库51

3.20 数据类52

3.21 被拒绝的遗赠52

3.22 注释52

3.23 狂热的元编程53

3.24 脱节的API53

3.25 不断重复的样板文本53

第4章 构建测试55

4.1 自我测试代码的价值55

4.2 Test∷Unit测试框架56

4.3 程序员测试和质量保证测试58

4.4 添加更多的测试59

第5章 重构花名册62

5.1 重构的格式62

5.2 查找引用63

第6章 组织方法64

6.1 提炼方法64

6.1.1 动机65

6.1.2 手法65

6.1.3 示例:没有局部变量66

6.1.4 示例:使用局部变量67

6.1.5 示例:重新给局部变量赋值67

6.2 内联化方法69

6.2.1 动机69

6.2.2 手法70

6.3 内联化临时变量70

6.3.1 动机70

6.3.2 手法71

6.4 使用查询替换临时变量71

6.4.1 动机71

6.4.2 手法71

6.4.3 示例72

6.5 使用链式调用替换临时变量73

6.5.1 动机74

6.5.2 手法74

6.5.3 示例74

6.6 引入解释性变量76

6.6.1 动机76

6.6.2 手法77

6.6.3 示例77

6.6.4 采用提炼方法的手法78

6.7 分解临时变量78

6.7.1 动机79

6.7.2 手法79

6.7.3 示例79

6.8 移除对参数赋值81

6.8.1 动机81

6.8.2 手法81

6.8.3 示例82

6.9 使用方法对象替换方法83

6.9.1 动机84

6.9.2 手法84

6.9.3 示例84

6.10 替换算法86

6.10.1 动机86

6.10.2 手法87

6.11 使用集合闭包方法替换循环87

6.11.1 动机87

6.11.2 手法87

6.11.3 示例87

6.12 提炼环绕方法88

6.12.1 动机89

6.12.2 手法89

6.12.3 示例90

6.13 引入类标注91

6.13.1 动机92

6.13.2 手法92

6.13.3 示例92

6.14 引入命名参数93

6.14.1 动机94

6.14.2 手法94

6.14.3 示例1:命名全部参数94

6.14.4 示例2:只命名可选参数95

6.15 移除命名参数97

6.15.1 动机97

6.15.2 手法98

6.15.3 示例98

6.16 移除未使用的默认参数99

6.16.1 动机100

6.16.2 手法100

6.16.3 示例100

6.17 动态方法定义101

6.17.1 动机101

6.17.2 手法101

6.17.3 示例:通过def_each来定义相似的方法102

6.17.4 instance_exec方法102

6.17.5 示例:用类标注来定义实例方法103

6.17.6 示例:通过扩展一个动态定义的模块来定义方法104

6.18 使用动态方法定义替换动态接收器105

6.18.1 动机105

6.18.2 手法105

6.18.3 示例:不用method_missing进行动态委托105

6.18.4 示例:使用自定义数据来定义方法106

6.19 隔离动态接收器107

6.19.1 动机107

6.19.2 手法108

6.19.3 示例108

6.20 把计算从运行时移到解析时110

6.20.1 动机111

6.20.2 手法111

第7章 在对象之间移动特性112

7.1 移动方法112

7.1.1 动机112

7.1.2 手法113

7.1.3 示例114

7.2 移动字段115

7.2.1 动机116

7.2.2 手法116

7.2.3 示例116

7.2.4 示例:使用自封装117

7.3 提炼类117

7.3.1 动机118

7.3.2 手法118

7.3.3 示例118

7.4 内联化类120

7.4.1 动机120

7.4.2 手法120

7.4.3 示例121

7.5 隐藏委托122

7.5.1 动机122

7.5.2 手法123

7.5.3 示例123

7.6 移除中间人124

7.6.1 动机124

7.6.2 手法125

7.6.3 示例125

第8章 组织数据126

8.1 自封装字段126

8.1.1 动机127

8.1.2 手法127

8.1.3 示例127

8.2 使用对象替换数据值128

8.2.1 动机129

8.2.2 手法129

8.2.3 示例129

8.3 将值对象改为引用对象131

8.3.1 动机131

8.3.2 手法131

8.3.3 示例132

8.4 将引用对象改为值对象133

8.4.1 动机134

8.4.2 手法134

8.4.3 示例134

8.5 使用对象替换数组136

8.5.1 动机136

8.5.2 手法136

8.5.3 示例136

8.5.4 使用Deprecation进行重构138

8.6 使用对象替换Hash139

8.6.1 动机139

8.6.2 手法140

8.6.3 示例140

8.7 将单向关联改为双向关联142

8.7.1 动机142

8.7.2 手法143

8.7.3 示例143

8.8 将双向关联改为单向关联145

8.8.1 动机145

8.8.2 手法145

8.8.3 示例146

8.9 使用符号常数代替魔法数147

8.9.1 动机148

8.9.2 手法148

8.10 封装集合148

8.10.1 动机148

8.10.2 手法149

8.10.3 示例149

8.10.4 将行为移入类里151

8.11 使用数据类替换记录152

8.11.1 动机152

8.11.2 手法152

8.12 使用多态替换类型码152

8.12.1 动机153

8.12.2 移除条件逻辑153

8.12.3 手法154

8.12.4 示例154

8.13 使用模块扩展替换类型码158

8.13.1 动机158

8.13.2 手法159

8.13.3 示例159

8.14 使用状态或策略模式替换类型码163

8.14.1 动机163

8.14.2 手法163

8.14.3 示例164

8.15 使用字段替换子类172

8.15.1 动机172

8.15.2 手法172

8.15.3 示例173

8.16 惰性初始化的属性175

8.16.1 动机175

8.16.2 手法175

8.16.3 以‖=为例175

8.16.4 以instance_variable_defined?为例176

8.17 及早初始化的属性176

8.17.1 动机176

8.17.2 讨论177

8.17.3 手法177

8.17.4 示例177

第9章 简化条件表达式178

9.1 分解条件语句178

9.1.1 动机179

9.1.2 手法179

9.1.3 示例179

9.2 重组条件语句180

9.2.1 动机180

9.2.2 示例:使用“Or”赋值替换三元操作符180

9.2.3 示例:使用显式返回替换条件语句180

9.3 合并条件表达式181

9.3.1 动机181

9.3.2 手法181

9.3.3 示例:Ors182

9.3.4 示例:Ands182

9.4 合并重复的条件片段183

9.4.1 动机183

9.4.2 手法183

9.4.3 示例183

9.5 移除控制位184

9.5.1 动机184

9.5.2 手法184

9.5.3 示例:使用break替换简单的控制位185

9.5.4 示例:返回控制位的结果186

9.6 使用守卫子句替换嵌套条件语句187

9.6.1 动机188

9.6.2 手法188

9.6.3 示例189

9.6.4 示例:逆转条件190

9.7 使用多态替换条件语句191

9.7.1 动机191

9.7.2 手法192

9.7.3 示例192

9.8 引入null对象194

9.8.1 动机195

9.8.2 手法196

9.8.3 示例197

9.8.4 示例:测试接口199

9.8.5 其他特殊情况200

9.9 引入断言200

9.9.1 动机200

9.9.2 手法201

9.9.3 示例201

第10章 简化方法调用203

10.1 重命名方法204

10.1.1 动机204

10.1.2 手法204

10.1.3 示例205

10.2 添加参数205

10.2.1 动机205

10.2.2 手法206

10.3 移除参数206

10.3.1 动机206

10.3.2 手法207

10.4 分离查询方法和修改方法207

10.4.1 动机207

10.4.2 手法208

10.4.3 示例208

10.4.4 并发问题210

10.5 参数化方法210

10.5.1 动机210

10.5.2 手法211

10.5.3 示例211

10.6 使用显式方法替换参数212

10.6.1 动机212

10.6.2 手法213

10.6.3 示例213

10.7 保留完整对象214

10.7.1 动机214

10.7.2 手法215

10.7.3 示例215

10.8 使用方法替换参数217

10.8.1 动机217

10.8.2 手法218

10.8.3 示例218

10.9 引入参数对象219

10.9.1 动机219

10.9.2 手法220

10.9.3 示例220

10.10 移除设值方法222

10.10.1 动机222

10.10.2 手法223

10.10.3 示例223

10.11 隐藏方法224

10.11.1 动机224

10.11.2 手法224

10.12 使用工厂方法替换构造函数225

10.12.1 动机225

10.12.2 手法226

10.12.3 示例226

10.13 使用异常替换错误码228

10.13.1 动机228

10.13.2 手法228

10.13.3 示例229

10.13.4 示例:在调用之前检查条件229

10.13.5 示例:调用方捕捉异常230

10.14 使用检测替换异常231

10.14.1 动机231

10.14.2 手法232

10.14.3 示例232

10.15 引入网关234

10.15.1 动机234

10.15.2 手法234

10.15.3 示例234

10.16 引入表达式构造器238

10.16.1 动机238

10.16.2 手法238

10.16.3 示例239

第11章 处理通用化243

11.1 方法上移243

11.1.1 动机243

11.1.2 手法244

11.1.3 示例244

11.2 方法下移245

11.2.1 动机245

11.2.2 手法245

11.3 提炼模块246

11.3.1 动机246

11.3.2 手法247

11.3.3 示例247

11.4 内联化模块249

11.4.1 动机249

11.4.2 手法249

11.5 提炼子类249

11.5.1 动机250

11.5.2 手法250

11.5.3 示例250

11.6 引入继承253

11.6.1 动机253

11.6.2 手法254

11.6.3 示例254

11.7 削减层次255

11.7.1 动机256

11.7.2 手法256

11.8 构造模板方法256

11.8.1 动机257

11.8.2 手法257

11.8.3 示例1:使用继承的模板方法257

11.8.4 示例2:使用模块扩展的模板方法261

11.9 使用委托替换继承266

11.9.1 动机266

11.9.2 手法267

11.9.3 示例267

11.10 使用层次替换委托268

11.10.1 动机269

11.10.2 手法269

11.10.3 示例269

11.11 使用模块替换抽象父类270

11.11.1 动机271

11.11.2 手法271

11.11.3 示例271

第12章 大型重构274

12.1 重构的本质274

12.2 为什么大型重构很重要275

12.3 四种大型重构275

12.4 解开纠缠的继承275

12.4.1 动机275

12.4.2 手法276

12.4.3 示例277

12.5 将过程设计转换成对象设计279

12.5.1 动机280

12.5.2 手法280

12.5.3 示例281

12.6 将领域和表现分开281

12.6.1 动机281

12.6.2 手法281

12.6.3 示例282

12.7 提炼层次285

12.7.1 动机286

12.7.2 手法286

12.7.3 示例286

第13章 总结289

参考文献292

重构手法列表293

热门推荐