利用这本通过示例“说话”的实例手册,可以充分发挥重构的强大功能,改善现有的软件。\r\n 身为程序员,必须具备的一个基本功就是能够找出闭幕式改善有问题的代码,使程度能够在软件的整个生命周期中正常运转。重构可谓是安全地改善既有代码设计的一门艺术,由此可以提供高效而可靠的系统,使纷杂凌乱归于平衡有序,并能最大限度地抑制导常的出现!重构可能很难掌握,但在本书作者所撰写的本书中,经由作者娓娓道来,有关内容得以通过一种易于学习的方式展现出来,不仅使学习之旅颇具实效,而且充满乐趣。\r\n 本书提供了一下优秀特性,可令读者轻松上手:\r\n * 方便的“坏味道”速查手册(嗅探工具)\r\n * 描述“坏味道”的标准格式\r\n * 介绍关键重构技术的附录\r\n * 支持重构的Java工具列表\r\n 对于许多人来说,学习重构的最大障碍是如何找出代码的“坏味道(smell)”,即可能存在问题之处。本书并非让你流水帐式地通读这些坏味道,而是确保你对这些坏味道有切实的理解。在此奉上了一系列精心组织的问题,通过这些问题的解决,你将会茅塞顿开,不仅会在更深层次上了解重构,而且还将获得你自己的一些心得体会。Wake采用了实例手册的方式来组织全书,以帮助你了解最为重要的重构技术并将其应用于代码之中。这是一种强调学习的方法,要求你必须充分应用本书所提供的诸多技术。除此之外,这种方法还有一个附带的好处,即尽管当前你所作的工作也许并非重构,利用本书也将有助于你更多地考虑如何创建优质的代码。\r\n 本书面向有Java经验的程序员,不过C#或C++程序员若对Java有基本的了解,也能顺利地阅读本书并学习书中的示例。本书可以作为Martin Fowler所著《重构——改善有代码的设计》一书的姊妹篇,该书对多种重构技术提供了循序渐进的介绍。
前 言\r\n第1章 路线图 \r\n 1.1 概述 \r\n 1.2 第1部分:类之中的坏味道 \r\n 1.3 第2部分:类之间的坏味道 \r\n 1.4 第3部分:待重构的程序 \r\n 1.5 关于练习 \r\n第1部分 类之中的坏味道\r\n 第2章 重构周期 \r\n 2.1 什么是重构? \r\n 2.2 坏味道即为问题 \r\n 2.3 重构周期 \r\n 2.4 什么时候才算结束? \r\n 2.5 在重构之中 \r\n 2.6 实战练习 \r\n 2.7 小结 \r\n 第3章 可度量的坏味道 \r\n 3.1 所涉及的坏味道 \r\n 3.2 注释 \r\n 3.3 过长的方法 \r\n 3.4 过大的类 \r\n 3.5 过长的参数表 \r\n 3.6 更多实战练习 \r\n 3.7 小结 \r\n 中场休息1 坏味道和重构 \r\n 第4章 命名 \r\n 4.1 所涉及的坏味道 \r\n 4.2 名字(包括匈牙利记法)中嵌有类型 \r\n 4.3 表达能力差的名字 \r\n 4.4 不一致的名字 \r\n 第5章 不必要的复杂性 \r\n 5.1 所涉及的坏味道 \r\n 5.2 死代码 \r\n 5.3 过分一般性 \r\n 中场休息2 逆处理 \r\n 第6章 重复 \r\n 6.1 所涉及的坏味道 \r\n 6.2 魔法数 \r\n 6.3 重复性代码 \r\n 6.4 接口不同的相似类 \r\n 6.5 实战练习 \r\n 第7章 条件逻辑 \r\n 7.1 所涉及的坏味道 \r\n 7.2 Null检查 \r\n 7.3 复杂的布尔表达式 \r\n 7.4 特殊用例 \r\n 7.5 模拟继承(Switch语句) \r\n 中场休息3 设计模式 \r\n第2部分 类之间的坏味道\r\n 第8章 数据 \r\n 8.1 所涉及的坏味道 \r\n 8.2 基本类型困扰 \r\n 8.3 数据类 \r\n 8.4 数据泥团 \r\n 8.5 临时字段 \r\n 第9章 继承 \r\n第10章 职责\r\n第11章 相关改变\r\n第12章 库类\r\n第三部分 待重构的程度\r\n 第13章 一个数据库例子\r\n 第14章 一个简单的游戏\r\n 第15章 编目\r\n 第16章 计划游戏模拟器\r\n 第17章 下一步何去何从\r\n第四部分 附录\r\n参考文献\r\n索引
William C.Wake是以为独立软件顾问、教员和培训师。他致力于程序设计已逾20年,曾任职于Capital One Financial、MCI/WorldCom和VTLS等世界知名大公司。他还是《Extreme Programming Explored》一书的作者。
什么是重构?重构是改善既有代码设计的一门艺术。重构不仅提供了相应途径以找出存在问题的代码,而且还对症下药,针对如何改善此类代码开出了处方。 本书目标本书是一本实例手册,专门用来帮助读者达到以下目的: l 尝试找出最重要的“坏味道(smell)”(即,存在的问题) l 应用最为重要的重构技术 l 充分考虑如何创建优质的代码 l 尽享重构带来的乐趣!具体来讲,本书是一本参考书,提供了以下内容: l 便于使用的坏味道嗅探工具(smell finder) l 描述坏味道的一种标准格式 l 附录中给出了支持重构的Java工具列表 l 附录中还提供了对关键重构技术的介绍 本书面向的对象重构是一种面向代码的技术,相应地,这本书则是特别为致力于编写和维护代码的程序员所著。学生们也能够从重构中大为获益,尽管我认为,只有当他们有机会参与开发一个中等规模或更大型的程序,或者作为成员之一在开发小组中经过一番历练之后,才会对重构的价值有所体会(无论是低年级学生、高年级学生还是研究生,都免不了有此磨练过程)。 所需背景知识如果你手边有Martin Fowler等人所著的《重构:改善既有代码的设计》①一书(以下简称为《重构》),或者至少能够访问www.refactoring.com网站,则可以参考其重构名录,这将对你大有裨益(你可以同时阅读本书和《重构》一书)。在《重构》中,Martin和他的合作伙伴们为多种重构技术给出了循序渐进的讲解,而在本书中,我并不打算做简单的重复,因为倘若如此不免沦为“鹦鹉学舌”。此外,Martin等人还提供了一个精心设计的实际示例,并附有大量精辟的论述和背景材料。也许有人希望在不了解《重构》的情况下读完本书,这并非完全不可以,但我对此持保留态度,还是建议你能够阅读《重构》,这会使你获益匪浅。本书中的示例均使用Java编写。这并不是因为Java是最易于完成重构的语言,而是因为这种语言相当流行,而且最好的Java开发环境可以提供自动化重构支持。如果一个C#或C++程序员对Java有足够的了解,那么这里的大多数问题对他来说也不难理解。不过,在本书后面的部分中,你将着手修改、测试和运行更大规模的程序,这对于使用非Java的其他语言进行开发的程序员来说可能会产生一定的困难。 Gamma等人所著的《设计模式》一书将模式描述为“重构的目标”。如果你对该书中的有关思想有所熟悉,则将有助于你学习本书,因为我将反复提到《设计模式》中所谈到的多种模式。如果你对《设计模式》尚不了解,那么我还将推荐另一本书,即Steve Metsker所著的《设计模式Java实例手册》②。 如何使用本书?相对于找出一个解决方案,实际解决问题的难度更大。在本书的后面提供了对部分问题的解答,但是在“偷看”答案之前,如果能够先行尝试解决问题,你将得到更大收获。倘若你确实自行解决了这些问题,甚至还有可能会对我的某些答案持有异议,这对你我来说都不失为一大乐事。毕竟如果你只是查看答案,并一味地惟命是从,那真是没有多大的乐趣可言。我想如果能够与别人精诚合作(可以有一个合作伙伴,也可以参与一个小组),将会更有意思,不过我发现这一愿望往往并不能兑现。后面(更长)的示例需要在一台计算机上完成。当在你的环境下阅读一个程序,寻找其中存在的问题并确定如何加以解决时,很可能与在此所述有所不同。 可以联系作者吗?当然可以:William.Wake@acm.org。我还有一个网站:www.xp123.com。这个网站所关注的是极限编程(extreme programming,XP),而重构是其中不可或缺的重要组成部分。在这个网站上,重构(以及本书)享有其自己的一席之地:www.xp123.com/rwb。我很想知道你对这些练习的体会,另外你对重构的一般认识也是我所感兴趣的,所以尽可以对我畅所欲言。 致谢编写这样一本书,最大的难题可谓是很难对提供过帮助的人逐一谢过。要知道,我们无法记住每一个伸出过援手的人的名字,而且必须承认,如果能够采纳所有人的建议,这本书可能会比现在更加出色。对于本书中的各种设计方案(或书中的练习),许多人都提出了建议,他们包括Philippe Antras、Ron Crocker、Sven Gorts、Harris Kirk、Tom Kubit、Paul Michali(他还提供了一个示例)、Edmund Schweppe、Steve Wake、Robert Wenner,还有其他一些人恕不在此一一列出。特别值得一提的是Sven Gorts和Tom Kubit,他们为我提供了尤其详尽的反馈意见和建议。Ann Adnerson、Ken Auer和Don Wells则审阅了本书书稿。我在Gene Codes Corporation(效力于Howard Cash)的程序员朋友们总是担心他们的某些做法会成为书中反例的素材(这里并没有他们的代码,不过在我考虑要表述哪些内容时,他们都曾对我有所启迪,而且每个人都至少对一些示例提出了建议)。在此要感谢Lucy Hadden、Jonathan Hoyle、Anna Khizhnyak、Tom Kubit、Greg Poth和Dave Relyea。这本书显然还要归功于Martin Fowler和Kent Beck先前所做的工作。他们的鼓励对我来说同样很重要。这本书所采用的形式则是受了Steve Metsker所著《设计模式Java实例手册》一书的启发;与Steve Metsker的讨论也使我获益匪浅。对于Addison-Wesley/Prentice Hall公司,我要向Mike Hendrickson、Ross Venables、Anne Garcia、Michelle Vincenti致以感谢,特别要感谢我的责任编辑Paul Petralia。BooksCraft的Don MacLaren和Ruth Frick对文字做了相当大的改进。这本书能够从一份书稿变成一本真正的书,其中一定倾注了许多人的心血;我并不知道你们的名字,但是对于你们的辛勤工作,在此表示最诚挚的谢意。 Pearson公司允许我采用了其他一些书中的信息,如下所列: l Beck,《EXTREME PROGRAMMING EXPLAINED:EMBRACING CHANGE》(《解析极限编程——拥抱变化》)①,第57页,©2000 Kent Beck版权所有。经Pearson Education出版公司许可,由Pearson Addison Wesley重印。 l Fowler,《REFACTORING: IMPROVING THE DESIGN OF EXISTING CODE》(《重构:改善既有代码的设计》),封二(重构列表);封三(坏味道和常用重构手法),©1999 Addison Wesley Longman公司版权所有。经Pearson Education出版公司许可,由Pearson Addison Wesley重印。 l Gamma/Helm/Johnson/Vlissides,《DESIGN PATTERNS: ELEMENTS OF REUSABLE OBJECT-ORIENTED SOFTWARE》第viii和ix页(内容表中的模式列表)。©1995 Addison Wesley 出版公司版权所有。经Pearson Education出版公司许可,由Pearson Addison Wesley重印。 l Wake,《EXTREME PROGRAMMING EXPLORED》,第24~25页,©2002 Pearson Education公司版权所有。经Pearson Education出版公司许可,由Pearson Addison Wesley重印。最后,绝对不能忘记我的家庭,如果没有向你们致以感谢,怎么能说得过去!你们不仅容忍了我的埋首写作,还不断地给我鼓励、支持和爱。有了这些,夫复何求? 谨献给 Booker Tyler Wake, 1913—2002 我最为崇敬的叔父。