重构 改善既有代码的设计 英文版

重构 改善既有代码的设计 英文版 pdf epub mobi txt 电子书 下载 2025

[美] 马丁·福勒(Martin Fowler) 著
图书标签:
  • 重构
  • 代码设计
  • 软件工程
  • 编程
  • 软件开发
  • 代码质量
  • 设计模式
  • 可维护性
  • 技术书籍
  • 经典书籍
想要找书就要到 静流书站
立刻按 ctrl+D收藏本页
你会得到大惊喜!!
出版社: 人民邮电出版社
ISBN:9787115401274
版次:02
商品编码:11824495
品牌:异步图书
包装:平装
开本:16开
出版时间:2015-12-01
页数:418
正文语种:英文版

具体描述

编辑推荐

软件开发的不朽经典
生动阐述重构原理和具体做法 
普通程序员进阶到编程高手必须修炼的秘笈

重构,一言以蔽之,就是在不改变外部行为的前提下,有条不紊地改善代码。多年前,正是本书原版的出版,使重构终于从编程高手们的小圈子走出,成为众多普通程序员日常开发工作中不可或缺的一部分。本书也因此成为与《设计模式》齐名的经典著作,被译为中、德、俄、日等众多语言,在世界范围内畅销不衰。

本书凝聚了软件开发社区专家多年摸索而获得的宝贵经验,拥有不因时光流逝而磨灭的价值。今天,无论是重构本身,业界对重构的理解,还是开发工具对重构的支持力度,都与本书出版时不可同日而语,但书中所蕴涵的意味和精华,依然值得反复咀嚼,而且往往能够常读常新。

内容简介

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

作者简介

Martin Fowler,世界软件开发大师,在面向对象分析设计、UML、模式、XP和重构等领域都有卓越贡献,现为软件开发咨询公司ThoughtWorks的首席科学家。他的多部著作《分析模式》、《UML精粹》和《企业应用架构模式》等都已经成为脍炙人口的经典。

目录

第1章 重构,第一个案例 1
1.1 起点 1
1.2 重构的第一步 7
1.3 分解并重组statement() 8
1.4 运用多态取代与价格相关的条件逻辑 34
1.5 结语 52
第2章 重构原则 53
2.1 何谓重构 53
2.2 为何重构 55
2.3 何时重构 57
2.4 怎么对经理说 60
2.5 重构的难题 62
2.6 重构与设计 66
2.7 重构与性能 69
2.8 重构起源何处 71
第3章 代码的坏味道 75
3.1 Duplicated Code(重复代码) 76
3.2 Long Method(过长函数) 76
3.3 Large Class(过大的类) 78
3.4 Long Parameter List(过长参数列) 78
3.5 Divergent Change(发散式变化) 79
3.6 Shotgun Surgery(霰弹式修改) 80
3.7 Feature Envy(依恋情结) 80
3.8 Data Clumps(数据泥团) 81
3.9 Primitive Obsession(基本类型偏执) 81
3.10 Switch Statements(switch惊悚现身) 82
3.11 Parallel InheritanceHierarchies(平行继承体系) 83
3.12 Lazy Class(冗赘类) 83
3.13 Speculative Generality(夸夸其谈未来性) 83
3.14 Temporary Field(令人迷惑的暂时字段) 84
3.15 Message Chains(过度耦合的消息链) 84
3.16 Middle Man(中间人) 85
3.17 Inappropriate Intimacy(狎昵关系) 85
3.18 Alternative Classes with Different Interfaces(异曲同工的类) 85
3.19 Incomplete Library Class(不完美的库类) 86
3.20 Data Class(纯稚的数据类) 86
3.21 Refused Bequest(被拒绝的遗赠) 87
3.22 Comments(过多的注释) 87
第4章 构筑测试体系 89
4.1 自测试代码的价值 89
4.2 JUnit测试框架 91
4.3 添加更多测试 97
第5章 重构列表 103
5.1 重构的记录格式 103
5.2 寻找引用点 105
5.3 这些重构手法有多成熟 106
第6章 重新组织函数 109
6.1 Extract Method(提炼函数) 110
6.2 Inline Method(内联函数) 117
6.3 Inline Temp(内联临时变量) 119
6.4 Replace Temp with Query(以查询取代临时变量) 120
6.5 Introduce Explaining Variable(引入解释性变量) 124
6.6 Split Temporary Variable(分解临时变量) 128
6.7 Remove Assignments to Parameters(移除对参数的赋值) 131
6.8 Replace Method with Method Object(以函数对象取代函数) 135
6.9 Substitute Algorithm(替换算法) 139
第7章 在对象之间搬移特性 141
7.1 Move Method(搬移函数) 142
7.2 Move Field(搬移字段) 146
7.3 Extract Class(提炼类) 149
7.4 Inline Class(将类内联化) 154
7.5 Hide Delegate(隐藏“委托关系”) 157
7.6 Remove Middle Man(移除中间人) 160
7.7 Introduce Foreign Method(引入外加函数) 162
7.8 Introduce Local Extension(引入本地扩展) 164
第8章 重新组织数据 169
8.1 Self Encapsulate Field(自封装字段) 171
8.2 Replace Data Value with Object(以对象取代数据值) 175
8.3 Change Value to Reference(将值对象改为引用对象) 179
8.4 Change Reference to Value(将引用对象改为值对象) 183
8.5 Replace Array with Object(以对象取代数组) 186
8.6 Duplicate Observed Data(复制“被监视数据”) 189
8.7 Change Unidirectional Association to Bidirectional(将单向关联改为双向关联) 197
8.8 Change Bidirectional Association to Unidirectional(将双向关联改为单向关联) 200
8.9 Replace Magic Number with Symbolic Constant(以字面常量取代魔法数) 204
8.10 Encapsulate Field(封装字段) 206
8.11 Encapsulate Collection(封装集合) 208
8.12 Replace Record with Data Class(以数据类取代记录) 217
8.13 Replace Type Code with Class(以类取代类型码) 218
8.14 Replace Type Code with Subclasses(以子类取代类型码) 223
8.15 Replace Type Code with State/Strategy(以State/Strategy取代类型码) 227
8.16 Replace Subclass with Fields(以字段取代子类) 232
第9章 简化条件表达式 237
9.1 Decompose Conditional(分解条件表达式) 238
9.2 Consolidate Conditional Expression(合并条件表达式) 240
9.3 Consolidate Duplicate Conditional Fragments(合并重复的条件片段) 243
9.4 Remove Control Flag(移除控制标记) 245
9.5 Replace Nested Conditional with Guard Clauses(以卫语句取代嵌套条件表达式) 250
9.6 Replace Conditional with Polymorphism(以多态取代条件表达式) 255
9.7 Introduce Null Object(引入Null对象) 260
9.8 Introduce Assertion(引入断言) 267
第10章 简化函数调用 271
10.1 Rename Method(函数改名) 273
10.2 Add Parameter(添加参数) 275
10.3 Remove Parameter(移除参数) 277
10.4 Separate Query from Modifier(将查询函数和修改函数分离) 279
10.5 Parameterize Method(令函数携带参数) 283
10.6 Replace Parameter with Explicit Methods(以明确函数取代参数) 285
10.7 Preserve Whole Object(保持对象完整) 288
10.8 Replace Parameter with Methods(以函数取代参数) 292
10.9 Introduce Parameter Object(引入参数对象) 295
10.10 Remove Setting Method(移除设值函数) 300
10.11 Hide Method(隐藏函数) 303
10.12 Replace Constructor with Factory Method(以工厂函数取代构造函数) 304
10.13 Encapsulate Downcast(封装向下转型) 308
10.14 Replace Error Code with Exception(以异常取代错误码) 310
10.15 Replace Exception with Test(以测试取代异常) 315
第11章 处理概括关系 319
11.1 Pull Up Field(字段上移) 320
11.2 Pull Up Method(函数上移) 322
11.3 Pull Up Constructor Body(构造函数本体上移) 325
11.4 Push Down Method(函数下移) 328
11.5 Push Down Field(字段下移) 329
11.6 Extract Subclass(提炼子类) 330
11.7 Extract Superclass(提炼超类) 336
11.8 Extract Interface(提炼接口) 341
11.9 Collapse Hierarchy(折叠继承体系) 344
11.10 Form Tem Plate Method(塑造模板函数) 345
11.11 Replace Inheritance with Delegation(以委托取代继承) 352
11.12 Replace Delegation with Inheritance(以继承取代委托) 355
第12章 大型重构 359
12.1 Tease Apart Inheritance(梳理并分解继承体系) 362
12.2 Convert Procedural Design to Objects(将过程化设计转化为对象设计) 368
12.3 Separate Domain from Presentation(将领域和表述/显示分离) 370
12.4 Extract Hierarchy(提炼继承体系) 375
第13章 重构,复用与现实 379
13.1 现实的检验 380
13.2 为什么开发者不愿意重构他们的程序 381
13.3 再论现实的检验 394
13.4 重构的资源和参考资料 394
13.5 从重构联想到软件复用和技术传播 395
13.6 小结 397
13.7 参考文献 397
第14章 重构工具 401
14.1 使用工具进行重构 401
14.2 重构工具的技术标准 403
14.3 重构工具的实用标准 405
14.4 小结 407
第15章 总结 409
参考书目 413
要点列表 417
索引 419

精彩书摘

  《重构 改善既有代码的设计 英文版》:
  Now it was easy to run a test—as easy as compiling.So I started to run tests every time I compiled.Soon I began to notice my productivity had shot upward.1 realized that I wasn't spending so much time debugging.If I added a bug that was caught by a previous test, it would show up as soon as I ran that test.Because the test had worked before, I would know that the bug was in the work I had done since I last tested.Because I ran the tests frequently, only a few minutes had elapsed.I thus knew that the source of the bug was the code I had just written, Because that code was fresh in my mind and was a small amount, the bug was easy to find.Bugs that once had taken an hour or more to find now took a couple of minutes at most.Not just had I built self—testing classes, but by running them frequently I had a powerful bug detector.
  As I noticed this I became more aggressive about doing the tests.Instead of waiting for the end of increment, I would add the tests immediately after writing a bit of function.Every day I would add a couple of new features and the tests to test them.These days I hardly ever spend more than a few minutes
  debugging.
  ……

前言/序言


《重构:改善既有代码的设计》(Refactoring: Improving the Design of Existing Code) 揭示软件开发的深层艺术,解锁高效、可维护的代码新境界。 在软件开发的世界里,我们常常会遇到这样一个悖论:最初精心设计的代码,随着时间的推移,需求的变更,功能的叠加,以及团队成员的更替,逐渐变得难以理解、难以修改,甚至成为阻碍项目前进的绊脚石。这种“技术债务”如影随形,蚕食着开发效率,增加了维护成本,并极大地削弱了团队的创新能力。 《重构:改善既有代码的设计》并非一本泛泛而谈的理论著作,它是一本实践指南,一本行动手册,更是一门关于如何“护理”和“优化”软件资产的艺术。本书的核心在于“重构”——一个系统性的过程,用于在不改变代码外在行为的前提下,改善其内部结构。它不是简单的代码“美容”,而是对软件本质的深入理解和精妙调整,其目的在于让代码更清晰、更简洁、更易于理解、更易于扩展,从而显著提升软件的健壮性和可维护性。 想象一下,你接手了一个复杂的项目,代码库庞大而错综复杂,如同一个古老的迷宫。新增一个功能需要花费数倍于预期的时间,而每一次微小的改动都可能引发连锁反应,出现意想不到的bug。你可能感到沮丧,甚至想要推倒重来。然而,《重构》告诉我们,几乎所有“糟糕”的代码都可以通过一系列小而安全的步骤来逐步改进,而无需承担大规模重写带来的巨大风险。 本书的作者,马丁·福勒(Martin Fowler),是软件工程领域的泰斗级人物,他以其深邃的洞察力和丰富的实践经验,为读者构建了一个完整而系统化的重构知识体系。他并非仅仅列举一些零散的技巧,而是通过深入浅出的方式,阐述了重构背后的设计原则和思维模式。 本书的价值何在?它为你提供了什么? 1. 一套行之有效的重构技术: 书中详细介绍了近百种被验证过、且被广泛使用的重构手法。这些手法被精心组织成“重构列表”,并根据其应用场景和复杂程度进行了分类。无论是“提取方法”(Extract Method)——将一段重复或复杂的代码封装成一个独立的方法,还是“替换继承关系以委托”(Replace Inheritance with Delegation)——将子类对父类的依赖转化为成员变量的委托调用,抑或是“隐藏委托”(Hide Delegate)——封装类内部的委托关系,使得客户端无需了解其内部结构,每一种手法都经过了详尽的解释,并配以清晰的代码示例,让你能够立即理解其意图并应用于实际项目中。 2. 理解“坏味道”的诊断能力: 在重构之前,首先需要识别出代码中存在的“坏味道”(Code Smells)。这些“坏味道”是代码结构不良的早期预警信号,是导致代码难以维护的根本原因。《重构》帮助你学会如何“闻出”这些气味,例如“重复代码”(Duplicated Code)、“过长方法”(Long Method)、“大类”(Large Class)、“发散式变化”(Divergent Change)、“霰弹式修改”(Shotgun Surgery)等等。一旦识别出这些“坏味道”,你就能更有针对性地采取相应的重构措施,从根本上解决问题。 3. 构建可测试、可演进的软件: 重构的强大之处在于,它必须在安全的环境下进行。而这个“安全网”,就是完善的单元测试。本书将单元测试置于重构过程的核心地位,强调在执行任何重构之前,都应该确保有充分的测试覆盖。这不仅能让你在重构过程中心无旁骛,更能为软件的长期演进奠定坚实的基础。有了测试的保障,你可以大胆地对代码进行修改,而不必担心破坏原有功能。 4. 提升代码的可读性和可理解性: 编写代码是为了让机器执行,但更重要的是让其他人(包括未来的你)能够理解。重构的核心目标之一就是提升代码的可读性。通过应用本书介绍的各种手法,你可以将冗长、晦涩的代码转化为清晰、模块化的结构,让代码的意图一目了然。这不仅能加速新成员的上手过程,更能减少沟通成本,提升团队协作效率。 5. 培养面向对象设计的精髓: 《重构》的许多手法都深刻地体现了面向对象设计的原则,如封装、继承、多态、高内聚、低耦合等。通过学习和实践重构,你将更深入地理解这些原则的实际应用,并能够写出更符合面向对象思想的代码。这对于构建具有良好扩展性和复用性的软件系统至关重要。 6. 一套完整的重构流程和心法: 本书不仅仅是技巧的罗列,更重要的是传达了一种重构的哲学和方法论。它教导我们如何循序渐进地进行重构,如何识别重构的机会,如何评估重构的效益,以及如何在团队中推广重构文化。它鼓励开发者保持一种持续改进的心态,将重构视为软件生命周期中不可或缺的一部分,而不是一项额外的负担。 这本书适合谁? 初级和中级软件开发者: 这是提升代码质量、掌握面向对象设计的必读书籍。它能帮助你避免养成不良的编码习惯,并为你提供解决复杂代码问题的实用工具。 有经验的软件工程师: 即使是经验丰富的开发者,也能从本书中学习到更深层次的重构技巧和设计思想,进一步打磨自己的技艺。 技术负责人和项目经理: 理解重构的价值,能够帮助你更好地评估技术债务,规划重构项目,并为团队创造更优化的开发环境。 任何对编写高质量、可维护软件感兴趣的人: 无论你身处哪个开发岗位,掌握重构的技能都将使你受益匪浅。 《重构:改善既有代码的设计》是一场软件开发的“净化”之旅,它邀请你一同踏上这条通往卓越代码的道路。 无论你的代码库是大是小,是新是旧,本书提供的知识和技术都将为你提供宝贵的指导,帮助你摆脱代码的束缚,释放开发潜能,构建真正可持续、可信赖的软件系统。这不仅仅是一本书,更是你成为一名更优秀、更自信的软件工程师的伙伴。翻开它,你将发现,重构的艺术,就是代码的生命力所在。

用户评价

评分

不得不说,这绝对是一本能够改变你编程习惯的书。在我拿到它之前,我总觉得“重构”是一个可有可无的概念,是那些“完美主义者”才会追求的东西。然而,读完这本书,我才深刻地意识到,重构不仅仅是一种技术,更是一种“工程思维”。作者的叙述方式非常引人入胜,他并没有使用那种枯燥的理论讲解,而是通过一个个生动的故事和具体的代码片段,将“重构”的精髓展现在读者面前。我尤其喜欢书中关于“如何识别代码中的‘坏味道’”的部分,那些描述得如此形象,简直就像是在照镜子一样,让我看到了自己代码中存在的一些问题。而书中提出的各种“重构技巧”,则像是一套精密的工具箱,每一种工具都能够解决特定的问题。我曾尝试过书中关于“搬移函数”和“替换继承关系为组合关系”的技巧,效果出奇地好。它让我意识到,原来那些曾经让我头疼不已的代码,经过一番“美容”,竟然能够焕发新生。这本书最让我感动的地方在于,它不仅仅关注“如何重构”,更关注“重构的价值”。它让我明白了,重构不仅仅是为了让代码“好看”,更是为了让代码“健壮”、“易于理解”、“易于维护”。这是一种长远的投资,能够为项目带来持续的价值。这本书,无疑是我编程工具箱里最珍贵的藏品之一。

评分

我必须承认,最初是被它的名气吸引过来的。毕竟,“重构”这个词,在很多技术圈子里都有着举足轻重的地位。拿到书的那一刻,我抱着一种“看看大师是怎么做的”心态。然而,读进去之后,才发现这本书的内容,远比我想象的要扎实得多。它不是那种“速成”的书籍,也不是那种“心灵鸡汤”式的鼓舞,而是真正地从技术层面,深入浅出地剖析了“如何改善既有代码设计”这一核心问题。书中的结构安排得非常合理,从最基础的概念讲起,然后逐步深入到各种具体的重构手法。我特别喜欢其中关于“代码气味”的章节,它让我能够更清晰地识别出代码中存在的问题,而不是那种“感觉不对劲”的模糊判断。书中提出的每一种重构技巧,作者都会给出详细的解释和代码示例,让你能够切实地理解其原理和应用场景。我尝试着在自己的项目中实践了一些书中介绍的技巧,比如“将方法参数列表中的重复参数合并”,以及“提取超类”。每一次实践,都让我对代码有了更深的理解,也让我的代码变得更加清晰和易于维护。这本书的价值,在于它提供了一种“系统性的解决方案”,而不是零散的技巧。它教会我如何从全局的角度去看待代码,如何通过一系列小的、可控的修改,来达到最终的重构目标。这是一种“润物细无声”的改变,但其效果却是深远的。

评分

这本书,我得说,它简直是我重构之旅的启明星。在接触这本书之前,我对“重构”这个词的理解,就像一个刚拿到菜刀的新手,只知道它能切东西,但具体怎么用,能切出什么花样,完全是两眼一抹黑。收到这本书的那一刻,我甚至有点犹豫,因为封面上的“重构”二字,听起来就有点技术含量,怕自己看不懂。但翻开第一页,我就被它那种深入浅出的讲解方式吸引住了。作者并没有一开始就抛出晦涩难懂的概念,而是从一些我们日常开发中经常遇到的痛点入手,比如一段难以理解的代码、一个容易出错的逻辑、一个难以维护的模块。他就像一位经验丰富的老工匠,耐心地引导我一步步地去审视那些“陈年旧账”,然后用一种非常有条理、有章法的方式,教我如何去“刮骨疗毒”。我特别喜欢书中关于“代码坏味”的分析,那些看似微不足道的代码缺陷,在作者的笔下,就像一个个潜伏的“定时炸弹”,一旦触发,后果不堪设想。而书中提供的各种“重构手法”,则像是一套精密的工具箱,每一种工具都有其特定的用途,能够针对性地解决不同的问题。比如,我一直很头疼那些长得像“意大利面”一样的函数,读了书中关于“提取函数”和“合并重复的参数列表”的章节后,我才恍然大悟,原来让代码变得清晰明了,并不需要多么高深的技巧,只需要掌握正确的方法。这本书最让我受益匪浅的一点是,它不仅仅是教我“怎么做”,更让我明白“为什么这样做”。它让我从一个只关心“能用就好”的初级开发者,进化成一个开始思考“如何让代码更健壮、更易于维护”的进阶者。

评分

这本书的到来,在我看来,与其说是一次阅读体验,不如说是一次思想的洗礼。它改变了我对“代码质量”的认知,也改变了我编写代码的习惯。在读这本书之前,我总是抱着一种“能跑就行”的心态,对于那些“有点乱”的代码,总觉得只要它还能工作,就没必要去动它。这种想法,就像是在一个摇摇欲坠的地基上不断加盖楼层,虽然短期内看不出问题,但迟早会坍塌。而这本书,就是那个警钟,它让我意识到,维护旧代码比编写新代码更需要智慧和耐心。作者的笔触非常细腻,他没有用那种枯燥的理论堆砌,而是通过一个个生动的案例,将那些抽象的概念具象化。我印象最深刻的是书中关于“代码腐败”的论述,那些因为时间推移、多人协作而产生的“代码味道”,在作者的剖析下,显得如此真实和普遍。书中提供的那些“重构”技巧,简直是“救命稻草”。我曾经为了修改一个Bug,在一段错综复杂的代码里摸爬滚打了好几天,最后还是不得已而为之,不敢轻易下手。读了这本书之后,我才明白,原来通过“重构”,可以把那些“毒瘤”一样的东西,一点点地“化疗”掉,最终让代码重获新生。书中对于“测试驱动开发”(TDD)的强调,也让我受益匪浅。它让我明白了,为什么在重构过程中,强大的测试套件是如此重要。就像在拆除危楼之前,需要先做好安全评估一样,测试,就是重构的安全网。这本书,让我从一个“代码搬运工”,变成了一个“代码雕塑家”。

评分

这本书,我只能说,它是一部“代码重构的圣经”。在我的编程生涯中,我曾无数次地面对过那些“面条状”、“意大利面条状”的代码,它们就像是代码界的“迷宫”,让人望而生畏。在读这本书之前,我往往只能硬着头皮去“修补”,而不敢去“改造”,生怕一个不小心,就让整个系统崩溃。然而,这本书的出现,彻底改变了我的思维模式。作者以极其清晰的逻辑和丰富的案例,为我打开了通往“代码优雅”的大门。他没有回避那些技术上的难点,而是用一种非常“接地气”的方式,将复杂的概念分解成易于理解的步骤。我尤其欣赏书中对“重构的价值”的强调,它不仅仅是为了让代码“好看”,更是为了让代码“易于理解”、“易于扩展”和“易于维护”。这些,都是一个优秀软件的基石。书中介绍的那些“代码坏味”,简直就像是为我量身定做的诊断手册,我总能在自己的代码中找到对应的“症状”。而书中提供的那些“重构模式”,则是我手中的“手术刀”,能够精准地切除那些“病灶”。我曾用“提取方法”这一技巧,将一个长达几百行的函数,变成了几个清晰明了的小函数,整个代码的可读性瞬间提升了几个档次。这本书,就像是一位经验丰富的导师,它不仅教会了我“如何做”,更教会了我“为什么这样做”,以及“什么时候这样做”。

评分

还没看呢 全英文看着好累哈哈哈哈

评分

经典书籍~之前的英文版已经买不到了

评分

帮同学买的书,活动特便宜

评分

书是好书,就是印刷质量太次了

评分

非常非常好

评分

经典书籍~之前的英文版已经买不到了

评分

书的内容很好,是英文的。可惜纸质太差,文字样式和排版不专业,印刷不均匀,字迹模糊,影响越多,容易视力疲劳,还不如看电子版的。

评分

评分

这个还不错,性价比超高

相关图书

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 book.coffeedeals.club All Rights Reserved. 静流书站 版权所有