重构与模式

当前位置:首页 > 计算机网络 > 软件工程/开发项目管理 > 重构与模式

出版社:人民邮电出版社
出版日期:2013-1
ISBN:9787115297259
作者:Joshua Kerievsky
页数:295页

章节摘录

版权页:   插图:   函数上移[F]重构需要将方法从子类搬移到超类,提炼类[F]重构需要将代码搬移到新类中,而搬移函数[F]重构需要将函数从一个类搬移到另一个类。 本书中讲述的几乎所有重构都是复合重构。我们从一段待修改的代码着手,然后渐进地应用各种低层次重构,直至完成所需的修改。在应用各个低层次重构之间,需要运行测试确保修改后的代码仍能如愿运行。因此,测试也是复合重构不可分割的一部分。如果不运行测试,你很难充满自信地应用低层次重构。 测试在重构中还扮演着一个完全不同的角色:它可以用来重新编写、代替老代码。测试驱动的重构(test—driven refactoring)包括应用测试驱动开发得到替换代码,然后将老代码替换为新代码(同时保留并重新运行老代码的测试)。 与测试驱动的重构相比,复合重构的使用率要高得多,因为大量重构工作只是改变原有代码的位置。当这样无法改善设计时,采用测试驱动的重构能够帮助我们安全而且有效地得到更佳的设计。 替换算法[F]重构是最适合使用测试驱动重构方式来实现重构的绝佳例子。它实际上是彻底地将原有算法替换为另一个更简单、更清晰的算法。你应该怎样得到新算法呢?通过将老算法转换为新算法是不行的,因为新算法的逻辑与之完全不同。可以先编写好新算法,用它替换老算法,然后看测试能否通过。如果测试无法通过,你很可能要花上很长时间进行调试。编写算法的更好方式是使用测试驱动开发。这种方式能够产生简单的代码,而且还能产生测试,从而使你或者其他人能够在此后充满自信地应用各种低层次重构或者复合重构。 用Builder封装Composite(6.5节)重构是测试驱动的重构的另一个例子。这种重构的目的是通过简化构建过程使客户代码能够更容易地构建Composite。设计中使用Builder提供构建Composite的简化方式。如果设计与原有设计差距很大,就可能无法使用多个低层次重构或者复合重构得到新的设计。同样,使用测试驱动开发能够更加有效地重新实现、替换老代码。 用Composite替换隐含树(7.5节)重构既是一个复合重构又是一个测试驱动重构。选择如何实现这个重构,取决于所遇到的代码的性质。一般说来,如果该代码很难实现提炼类[F]重构,那么测试驱动重构方式可能更容易。用Composite替换隐含树重构中有一个使用测试驱动重构的例子。 将装饰功能搬移Decorator(7.3节)重构不是测试驱动的重构;但是,这个重构的示例却说明了如何用测试驱动的重构将框架外的行为搬移到框架内。这个示例所涉及的是搬移代码,因此似乎用复合重构实现应该更方便。但事实上,修改要涉及更新许多类,最终还是用测试驱动开发进行设计转换更容易。 在实际重构中,可能大多数时间都在使用低层次重构和复合重构。只需要记住,通过测试驱动的重构完成的“重新实现和替换”技术,也是重构的一种有用方式即可。在设计一种新的算法或者机制时这种方式最有效,而且这种方式比应用低层次重构或者复合重构更容易。

名人推荐

重构必须付诸实践,才能体现出其真正价值,而非仅仅作为一种抽象的智力练习。模式则记录了具有公认的良好属性的程序结构。本书将两者完美地结合起来。如果想真正实践重构,我推荐你阅读本书并活学活用。 ——Kent Beck,软件开发方法学的泰斗,极限编程创始人,模式先驱 在《设计模式》一书中,我们曾经提到,设计模式是重构的目标。本书终于证实我们所言不虚。除此之外,本书还能够加深读者对设计模式和重构两方面的领悟。 ——Erich Gamma,《设计模式》作者之一,模式先驱 现在,软件模式和敏捷开发之间的联系终于被人道破。 ——Ward Cunningham,极限编程创始人,模式先驱,Wiki发明者 Joshua Kerievsky通过一系列独树一帜的设计级重构,将重构提升到全新的层次。本书向开发人员展示了如何对设计进行改进,从而简化日常工作。本书是重构实践的珍贵参考书。 ——Sven Gorts,重构与敏捷开发布道者,比利时refactoring.be网站创始人 我第一次见到Joshua就对他在理解、应用和教授设计模式上表现出来的热情留下了深刻印象。伟大的教师对自己教授的内容和如何与人分享都有这样的热情。我想Joshua不愧是一位伟大的教师,一位伟大的开发者,我们都从他的深刻洞察中获益良多。 ——Craig Larman,Valtech首席科学家,《UML和模式应用》和《敏捷迭代开发》作者 掌握一门手艺不仅仅要获得正确的工具,还需要学会高效地使用工具。本书阐释了如何将工业级的设计工具与艺术家的技巧熔于一炉。 ——Russ Rufer,硅谷模式讨论组创始人 本书是对《设计模式》一书的重构,可能意义还不仅限于此。在此之前,设计模式这一主题一直是作为静态和僵化的过程来阐述的,本书则将其看做是动态和灵活的,使模式的学习变成了一种试验、出错然后改正的人性化过程,从中读者能够理解到,优秀的设计并非一蹴而就——它们都经历了艰难和反恩。Kerievsky还重构了阐述方式本身。使其更加清晰,更容易接受。实际上,他解决了我在写作Thinking in Patterns一书中遇到的许多组织问题。本书透彻地介绍并结合了测试、重构和设计模式诸多方面,字里行间洋溢着叙述的轻松、良好的技术感觉和难得的真知灼见。 ——Bruce Eckel,Mindview公司总裁,《Java编程思想》和《C++编程思想》作者

媒体关注与评论

“重构必须付诸实践,才能体现出其真正价值,而非仅仅作为一种抽象的智力练习。模式则记录了具有公认良好属性的程序结构。本书将两者完美地结合起来。如果想真正实践重构,我推荐你阅读本书并活学活用。”——Kent Beck,软件开发方法学的泰斗,极限编程创始人,模式先驱“在《设计模式》一书中,我们曾经提到,设计模式是重构的目标。本书终于证实我们所言不虚。除此之外,本书还能够加深读者对设计模式和重构两方面的领悟。”——Erich Gamma,IBM公司Eclipse Java开发工具负责人,《设计模式》四作者之一,模式先驱“现在,软件模式和敏捷开发之间的联系终于被人道破。”——Ward Cunningham,极限编程创始人,模式先驱,Wiki发明者“本书展示了一种应用模式的创新方法,将自上而下地使用设计模式与自下而上地揭示迭代式开发和持续重构结合起来。任何职业软件开发人员都应该使用这种方法,去寻找使用模式改进代码的新的可能。”——Bobby Woolf,IBM公司WebSphere软件服务部门IT咨询专家,Enterprise Integration Patterns和The Design Patterns Smalltalk Companion作者之一“Joshua Kerievsky通过一系列独树一帜的设计级重构,将重构提升到全新的层次。本书向开发人员展示了如何对设计进行改进,从而简化日常工作。本书是重构实践的珍贵参考书。”——Sven Gorts,重构与敏捷开发布道者,比利时refactoring.be网站创始人“本书是对《设计模式》一书的重构,可能意义还不仅限于此。在此之前,设计模式这一主题一直是作为静态和僵化的过程来阐述的,本书则将其看做是动态和灵活的,使模式的学习变成了一种试验、出错然后改正的人性化过程,从中读者能够理解到,优秀的设计并非一蹴而就——它们都经历了艰难和反思。Kerievsky还重构了阐述方式本身,使其更加清晰,更容易接受。实际上,他解决了我在写作Thinking in Patterns一书中遇到的许多组织问题。本书透彻地介绍并结合了测试、重构和设计模式诸多方面,字里行间洋溢着叙述的轻松、良好的技术感觉和难得的真知灼见。”——Bruce Eckel,Mindview公司总裁,《Java编程思想》和《C++编程思想》的作者“我第一次见到Joshua,就对他在理解、应用和教授设计模式上表现出来的热情留下了深刻印象。伟大的教师对自己教授的内容和如何与人分享都有这样的热情。我想Joshua不愧是一位伟大的教师,一位伟大的开发者,我们都从他的深刻洞察中获益良多。”——Craig Larman,Valtech首席科学家,《UML和模式应用》和《敏捷迭代开发》作者

内容概要

  Joshua Kerievsky
最具人气的年轻一代软件开发专家之一,极限编程先驱、敏捷项目管理的思想领袖、敏捷eLearning的改革者。软件开发公司Industrial
Logic的创始人。他曾为许多专业杂志撰稿,并多次在世界级技术会议上担任讲师,并撰写了大量的论文。除本书外,他还参与撰写了Extreme
Programming Explored和Extreme Programming Perspectives两本书。

书籍目录

第1章 本书的写作缘由 1
1.1 过度设计 1
1.2 模式万灵丹 2
1.3 设计不足 2
1.4 测试驱动开发和持续重构 3
1.5 重构与模式 5
1.6 演进式设计 6
第2章 重构 7
2.1 何谓重构 7
2.2 重构的动机 8
2.3 众目睽睽 9
2.4 可读性好的代码 10
2.5 保持清晰 11
2.6 循序渐进 11
2.7 设计欠账 12
2.8 演变出新的架构 13
2.9 复合重构与测试驱动的重构 13
2.10 复合重构的优点 15
2.11 重构工具 15
第3章 模式 17
3.1 何谓模式 17
3.2 模式痴迷 18
3.3 实现模式的方式不止一种 20
3.4 通过重构实现、趋向和去除模式 22
3.5 模式是否会使代码更加复杂 24
3.6 模式知识 25
3.7 使用模式的预先设计 26
第4章 代码坏味 28
4.1 重复代码(Duplicated Code) 30
4.2 过长函数(Long Method) 30
4.3 条件逻辑太复杂(Conditional Complexity) 31
4.4 基本类型偏执(Primitive Obsession) 32
4.5 不恰当的暴露(Indecent Exposure) 32
4.6 解决方案蔓延(Solution Sprawl) 33
4.7 异曲同工的类(Alternative Classes with Different Interfaces) 33
4.8 冗赘类(Lazy Class) 33
4.9 过大的类(Large Class) 33
4.10 分支语句(Switch Statement) 34
4.11 组合爆炸(Combinatorial Explosion) 34
4.12 怪异解决方案(Oddball Solution) 34
第5章 模式导向的重构目录 36
5.1 重构的格式 36
5.2 本目录中引用的项目 37
5.2.1 XML Builder 38
5.2.2 HTML Parser 38
5.2.3 贷款风险计算程序 39
5.3 起点 39
5.4 学习顺序 39
第6章 创建 41
6.1 用Creation Method替换构造函数 43
6.1.1 动机 43
6.1.2 做法 45
6.1.3 示例 45
6.1.4 变体 49
6.2 将创建知识搬移到Factory 51
6.2.1 动机 51
6.2.2 做法 54
6.2.3 示例 55
6.3 用Factory封装类 60
6.3.1 动机 60
6.3.2 做法 61
6.3.3 示例 62
6.3.4 变体 65
6.4 用Factory Method引入多态创建 67
6.4.1 动机 67
6.4.2 做法 68
6.4.3 示例 70
6.5 用Builder封装Composite 74
6.5.1 做法 76
6.5.2 示例 77
6.5.3 变体 87
6.6 内联Singleton 90
6.6.1 动机 90
6.6.2 做法 92
6.6.3 示例 93
第7章 简化 96
7.1 组合方法 97
7.1.1 动机 97
7.1.2 做法 99
7.1.3 示例 99
7.2 用Strategy替换条件逻辑 102
7.2.1 动机 102
7.2.2 做法 104
7.2.3 示例 105
7.3 将装饰功能搬移到Decorator 115
7.3.1 动机 115
7.3.2 做法 118
7.3.3 示例 119
7.4 用State替换状态改变条件语句 133
7.4.1 动机 133
7.4.2 做法 134
7.4.3 示例 135
7.5 用Composite替换隐含树 143
7.5.1 动机 143
7.5.2 做法 146
7.5.3 示例 147
7.6 用Command替换条件调度程序 155
7.6.1 动机 155
7.6.2 做法 157
7.6.3 示例 158
第8章 泛化 164
8.1 形成Template Method 165
8.1.1 动机 166
8.1.2 做法 167
8.1.3 示例 167
8.2 提取Composite 172
8.2.1 动机 172
8.2.2 做法 173
8.2.3 示例 174
8.3 用Composite替换一/多之分 180
8.3.1 动机 180
8.3.2 做法 182
8.3.3 示例 183
8.4 用Observer替换硬编码的通知 190
8.4.1 动机 190
8.4.2 做法 191
8.4.3 示例 192
8.5 通过Adapter统一接口 199
8.5.1 动机 199
8.5.2 做法 200
8.5.3 示例 201
8.6 提取Adapter 208
8.6.1 动机 208
8.6.2 做法 210
8.6.3 示例 210
8.6.4 变体 216
8.7 用Interpreter替换隐式语言 217
8.7.1 动机 217
8.7.2 做法 219
8.7.3 示例 220
第9章 保护 230
9.1 用类替换类型代码 231
9.1.1 动机 231
9.1.2 做法 233
9.1.3 示例 234
9.2 用Singleton限制实例化 240
9.2.1 动机 240
9.2.2 做法 241
9.2.3 示例 241
9.3 引入Null Object 244
9.3.1 动机 244
9.3.2 做法 246
9.3.3 示例 247
第10章 聚集操作 252
10.1 将聚集操作搬移到Collecting Parameter 253
10.1.1 动机 253
10.1.2 做法 254
10.1.3 示例 255
10.2 将聚集操作搬移到Visitor 259
10.2.1 动机 259
10.2.2 做法 263
10.2.3 示例 267
第11章 实用重构 274
11.1 链构造函数 275
11.1.1 动机 275
11.1.2 做法 276
11.1.3 示例 276
11.2 统一接口 278
11.2.1 动机 278
11.2.2 做法 279
11.2.3 示例 279
11.3 提取参数 280
11.3.1 动机 280
11.3.2 做法 280
11.3.3 示例 281
跋 282
参考文献 283
索引 286

编辑推荐

讲述重构与设计模式两大热门技术,将两者有机结合,极具实战价值,业界专家学习和教授重构与模式亲身经历的结晶,《设计模式》作者Erich Gamma、Ralph Johnson和《重构》作者Martin Fowler联合推荐。

作者简介

《重构与模式(修订版)》开创性地深入揭示了重构与模式这两种软件开发关键技术之间的联系,说明了通过重构实现模式改善既有的设计,往往优于在新的设计早期使用模式。《重构与模式(修订版)》不仅展示了一种应用模式和重构的创新方法,而且有助于读者透过实战深入理解重构和模式。书中讲述了27种重构方式。

图书封面


 重构与模式下载 精选章节试读



发布书评

 
 


精彩短评 (总计31条)

  •     不错 书很不错
  •     还是要多打代码以后再回来看比较合适
  •     就猜会重印了!就等着呢!
  •     翻了下书的内容还不错,值得学习和探究的东西很多,就是纸张不是特别好
  •     提升代码设计的可重构性和可扩展性。
  •     老版本的重构与模式已经买不到了,只能买这个版本,非常经典
  •     浙江图书馆
  •     书有磨损,脏
  •     设计模式和重构都看过了,收益颇多,再看看这本,也是很多培训老师推荐的
  •     翻译中文读起来很生涩,读完的感觉像脚底踩着棉花。 2016.08.16 重读 读懂UML图。
  •     对我的项目非常有帮助,实际应用指导性强
  •     内容非常难懂,看了前一章就放弃了。。。貌似翻译也不是太好。
  •     很好很耐看,经典教程
  •     书名原意是通过重构,把模式引入代码,最终是趋近于模式还是就是约定俗成的模式则是经验所在。跟着作者建议的阅读顺序,能相对顺序的把示例的代码进行比较理想的重构,部分模式需要主题阅读以理解应用。
  •     书到了没细看,感觉还可以,就是例子是JAVA的,本人不搞JAVA。
  •     印刷不错 但是送来的时候封面脏死了 打包要注意!!!!
  •     重构与模式(修订版)
  •     重构和模式要一起看..
  •     把重构和设计模式完美结合
  •     正在阅读中,设计模式:可复用对象基础 重构与模式 重构:改善既有代码设计都很推荐
  •     书内容很好。但是送来的书是坏的,从中间裂开,最后换了一本,服务态度还挺好
  •     非常好的一本书,讲解怎么讲一段坏味道的代码经过重构,应用一种设计模式,得到一个恰当的结果。这本书更多是一本艰深的入门书,自己看的也是比较粗,过一段时间再好好复习一遍,应该会有很多收获吧。
  •     废话铺垫太长,花了大量的篇幅说了一些我们都知道的但是无用的“道理”!其实还是有不少值得读的内容的,但是这种写书做法不免让我怀疑是在考验读者智商还是考验忍耐力?
  •     温故而知新。
  •     刚看了几章,很有启发。有一些经验的人看,体会更深
  •     内容蛮好的,只不过需要一定的Java基础,想学C++的重构还是不要买这个
  •     才看完前40页,年纪大了,看书时间少,正在努力中....
  •     正在读,目前的体会是作者很理性,算是对设计模式的补充,因为现在有太多的人张口闭口就是设计模式,有种模式烂大街的感觉,知道设计模式固然重要,然而清晰滴知道什么情况不用也同样重要。 有些情况下,两种模式都可以使用(collecting parameter和visitor等等),但是效果和对未来的影响却不尽相同,甚至影响深远,这个是涉及到对问题本身的认知深度,模式只是被用来解决问题的方式而已,远远不是主角。 作者不希望这本书被读者在实际工作中套用设计模式,而应该是加深模式理解的登堂入室读本。
  •     这本书比设计模式经典更详细,可以作为模式的入门级书。
  •     对重构与模式间的关系讲解很到位!就是书本装订感觉有点不太好,封面太硬、页与页之间太紧凑了。看着看着啪一下自动合上了......
  •     很有必要看的一本书,值得一看
 

外国儿童文学,篆刻,百科,生物科学,科普,初中通用,育儿亲子,美容护肤PDF图书下载,。 零度图书网 

零度图书网 @ 2024