重构

重构:改善既有代码的设计(第2版)

查阅电子书
手机扫码
  • 微信扫一扫

    关注微信公众号

因版权原因待上架

编辑推荐

重构20年的更新版本,生动阐述重构原理和具体做法。

内容简介

本书是经典著作《重构》出版20年后的更新版。书中清晰揭示了重构的过程,解释了重构的原理和实践方式,并给出了何时以及何地应该开始挖掘代码以求改善。书中给出了60多个可行的重构,每个重构都介绍了一种经过验证的代码变换手法的动机和技术。本书提出的重构准则将帮助开发人员一次一小步地修改代码,从而减少了开发过程中的风险。

本书适合软件开发人员、项目管理人员等阅读,也可作为高等院校计算机及相关专业师生的参考读物。

作者简介

作者简介

马丁·福勒(Martin Fowler) 软件开发大师,ThoughtWorks 科学家。他是一位作家、演说者、咨询师。他致力于改善企业级的软件设计,对设计以及支撑设计的工程实践孜孜以求。他在重构、面向对象分析设计、模式、XP 和UML 等领域都有贡献,著有《重构》《分析模式》《领域特定语言》等经典著作。

译者简介

熊节 在IT 行业已经打拼了18年,在金融、零售、政府、电信、制造业等行业的信息化建设方面有着丰富经验,是中国IT业敏捷浪潮的领军人物。熊节拥有利物浦大学MBA学位。

林从羽 ThoughtWorks软件开发工程师,曾服务于国内外多家大型企业,致力于帮助团队更快更好地交付可工作的软件。拥抱敏捷精神,TDD爱好者,纯键盘工作者。

章节目录

第 1 章 重构,第 一个示例 1

1.1 起点 1

1.2 对此起始程序的评价 3

1.3 重构的第 一步 5

1.4 分解statement 函数 6

1.5 进展:大量嵌套函数 22

1.6 拆分计算阶段与格式化阶段 24

1.7 进展:分离到两个文件(和两个阶段) 31

1.8 按类型重组计算过程 34

1.9 进展:使用多态计算器来提供数据 41

1.10 结语 43

第 2 章 重构的原则 45

2.1 何谓重构 45

2.2 两顶帽子 46

2.3 为何重构 47

2.4 何时重构 50

2.5 重构的挑战 55

2.6 重构、架构和YAGNI 62

2.7 重构与软件开发过程 63

2.8 重构与性能 64

2.9 重构起源何处 67

2.10 自动化重构 68

2.11 延展阅读 70

第3 章 代码的坏味道 71

3.1 神秘命名(Mysterious Name) 72

3.2 重复代码(Duplicated Code) 72

3.3 过长函数(Long Function) 73

3.4 过长参数列表(Long Parameter List) 74

3.5 全局数据(Global Data) 74

3.6 可变数据(Mutable Data) 75

3.7 发散式变化(Divergent Change) 76

3.8 霰弹式修改(Shotgun Surgery) 76

3.9 依恋情结(Feature Envy) 77

3.10 数据泥团(Data Clumps) 78

3.11 基本类型偏执(Primitive Obsession) 78

3.12 重复的switch(Repeated Switches) 79

3.13 循环语句(Loops) 79

3.14 冗赘的元素(Lazy Element) 80

3.15 夸夸其谈通用性(Speculative Generality) 80

3.16 临时字段(Temporary Field) 80

3.17 过长的消息链(Message Chains) 81

3.18 中间人(Middle Man) 81

3.19 内幕交易(Insider Trading) 82

3.20 过大的类(Large Class) 82

3.21 异曲同工的类(Alternative Classes with Different Interfaces) 83

3.22 纯数据类(Data Class) 83

3.23 被拒绝的遗赠(Refused Bequest) 83

3.24 注释(Comments) 84

第4 章 构筑测试体系 85

4.1 自测试代码的价值 85

4.2 待测试的示例代码 87

4.3 第 一个测试 90

4.4 再添加一个测试 93

4.5 修改测试夹具 95

4.6 探测边界条件 96

4.7 测试远不止如此 99

第5 章 介绍重构名录 101

5.1 重构的记录格式 101

5.2 挑选重构的依据 102

第6 章 第 一组重构 105

6.1 提炼函数(Extract Function) 106

6.2 内联函数(Inline Function) 115

6.3 提炼变量(Extract Variable) 119

6.4 内联变量(Inline Variable) 123

6.5 改变函数声明(Change Function Declaration) 124

6.6 封装变量(Encapsulate Variable) 132

6.7 变量改名(Rename Variable) 137

6.8 引入参数对象(Introduce Parameter Object) 140

6.9 函数组合成类(Combine Functions into Class) 144

6.10 函数组合成变换(Combine Functions into Transform) 149

6.11 拆分阶段(Split Phase) 154

第7 章 封装 161

7.1 封装记录(Encapsulate Record) 162

7.2 封装集合(Encapsulate Collection) 170

7.3 以对象取代基本类型(Replace Primitive with Object) 174

7.4 以查询取代临时变量(Replace Temp with Query) 178

7.5 提炼类(Extract Class) 182

7.6 内联类(Inline Class) 186

7.7 隐藏委托关系(Hide Delegate) 189

7.8 移除中间人(Remove Middle Man) 192

7.9 替换算法(Substitute Algorithm) 195

第8 章 搬移特性 197

8.1 搬移函数(Move Function) 198

8.2 搬移字段(Move Field) 207

8.3 搬移语句到函数(Move Statements into Function) 213

8.4 搬移语句到调用者(Move Statements to Callers) 217

8.5 以函数调用取代内联代码(Replace Inline Code with Function Call) 222

8.6 移动语句(Slide Statements) 223

8.7 拆分循环(Split Loop) 227

8.8 以管道取代循环(Replace Loop with Pipeline) 231

8.9 移除死代码(Remove Dead Code) 237

第9 章 重新组织数据 239

9.1 拆分变量(Split Variable) 240

9.2 字段改名(Rename Field) 244

9.3 以查询取代派生变量(Replace Derived Variable with Query) 248

9.4 将引用对象改为值对象(Change Reference to Value) 252

9.5 将值对象改为引用对象(Change Value to Reference) 256

第 10 章 简化条件逻辑 259

10.1 分解条件表达式(Decompose Conditional) 260

10.2 合并条件表达式(Consolidate Conditional Expression) 263

10.3 以卫语句取代嵌套条件表达式(Replace Nested Conditional with Guard Clauses) 266

10.4 以多态取代条件表达式(Replace Conditional with Polymorphism) 272

10.5 引入特例(Introduce Special Case) 289

10.6 引入断言(Introduce Assertion) 302

第 11 章 重构API 305

11.1 将查询函数和修改函数分离(Separate Query from Modifier) 306

11.2 函数参数化(Parameterize Function) 310

11.3 移除标记参数(Remove Flag Argument) 314

11.4 保持对象完整(Preserve Whole Object) 319

11.5 以查询取代参数(Replace Parameter with Query) 324

11.6 以参数取代查询(Replace Query with Parameter) 327

11.7 移除设值函数(Remove Setting Method) 331

11.8 以工厂函数取代构造函数(Replace Constructor with Factory Function) 334

11.9 以命令取代函数(Replace Function with Command) 337

11.10 以函数取代命令(Replace Command with Function) 344

第 12 章 处理继承关系 349

12.1 函数上移(Pull Up Method) 350

12.2 字段上移(Pull Up Field) 353

12.3 构造函数本体上移(Pull Up Constructor Body) 355

12.4 函数下移(Push Down Method) 359

12.5 字段下移(Push Down Field) 361

12.6 以子类取代类型码(Replace Type Code with Subclasses) 362

12.7 移除子类(Remove Subclass) 369

12.8 提炼超类(Extract Superclass) 375

12.9 折叠继承体系(Collapse Hierarchy) 380

12.10 以委托取代子类(Replace Subclass with Delegate) 381

12.11 以委托取代超类(Replace Superclass with Delegate) 399

参考文献 405

索引 409

重构是2019年由人民邮电出版社出版,作者[美]马丁·福勒(MartinFowler)。

得书感谢您对《重构》关注和支持,如本书内容有不良信息或侵权等情形的,请联系本网站。

购买这本书

你可能喜欢
SpringBoot开发与测试实战 电子书
一本关于Spring Boot应用程序开发和测试的入门图书。
Python网络爬虫实例教程(视频讲解版) 电子书
本书主要内容包括:网络爬虫概述、requests库入门、xapth语法详解、认识和应对反爬虫、模拟登录和验证码的处理、动态页面的分析方法、scrapy框架基础、应对反爬虫策略、scrapy数据存储、提交数据和保持登录、crawlspider模板、图片下载和文件下载、分布式爬虫、增量式爬虫、
代码整洁之道:程序员的职业素养 电子书
编程大师40余年心得体会,阐释软件工艺中的原理、技术、工具和实践,助力专业软件开发人员具备令人敬佩的职业素养。
Python高手修炼之道:数据处理与机器学习实战 电子书
适读人群 :1.没有编程知识的新手 不同于一般的基础语法讲解教程,本书并未将Python 开发限定于某个集成开发工具(IDE)中,而是采用交互式编程的方式来强化读者对语言特性的理解,帮助新手读者真正理解Python 语言和Python 编程。2.从未接触过Python 语言,但了解一点编程知识的初学者 本书通过对基础知识高度的提炼和概括,以避免初学者陷入低级且冗长的细节知识点而心生懈怠;同时,本书为初学者规划了从初级到高级的编程技能提升路线图。3.具有一定基础的Python 程序员 本书可以作为案头工具书来使用。本书从基础语法、基本技能讲起,涵盖了科学计算、数据处理、机器学习等领域,示例代码涉及30 余个模块的使用。 构建从Python入门到数据分析到机器学习的路线图,入门有章可循; 1.讲解独到,常见盲点趣解析 作者基于多年的经验积累,善于总结概括初学Python过程中的误区。 2.内容全面,常用工具全涵盖 书中介绍的Python工具包覆盖Numpy、Matplotlib、Pandas、SciPy、Scikit-Learn,方便读者拓展实用技能、掌握工作利器。 3.拓展训练,重点知识有强化 语感训练100题、Python内置函数(类)手册、从新手到高手的100个模块,强化知识点的掌握。 4.代码完整,随时动手可复现 本书提供了完整、可验证的代码,方便读者动手练习并强化理解。
Python数据分析与应用 电子书
本书采用了以任务为导向的教学模式,按照解决实际任务的工作流程路线,逐步展开介绍相关的理论知识点,推导生成可行的解决方案, 后落实在任务实现环节。 全书大部分章节紧扣任务需求展开,不堆积知识点,着重于解决问题时思路的启发与方案的实施。通过从任务需求到实现这一完整工作流程的体验,帮助读者真正理解与消化Python数据分析与应用。 书中案例全部源于企业真实项目,可操作性强,引导读者融会贯通,并提供源代码等相关学习资源,帮助读者快速掌握大数据相关技能。