Refactoring to Patterns

Joshua Kerievsky

出版时间

2004-08-15

ISBN

9780321213358

评分

★★★★★
书籍介绍

In 1994, Design Patterns changed the landscape of object-oriented development by introducing classic solutions to recurring design problems. In 1999, Refactoring revolutionized design by introducing an effective process for improving code. With the highly anticipated Refactoring to Patterns, Joshua Kerievsky has changed our approach to design by forever uniting patterns with the evolutionary process of refactoring. This book introduces the theory and practice of pattern-directed refactorings: sequences of low-level refactorings that allow designers to safely move designs to, towards, or away from pattern implementations. Using code from real-world projects, Kerievsky documents the thinking and steps underlying over two dozen pattern-based design transformations. Along the way he offers insights into pattern differences and how to implement patterns in the simplest possible ways. Coverage includes: * A catalog of twenty-seven pattern-directed refactorings, featuring real-world code examples * Descriptions of twelve design smells that indicate the need for this book's refactorings * General information and new insights about patterns and refactoring * Detailed implementation mechanics: how low-level refactorings are combined to implement high-level patterns * Multiple ways to implement the same pattern-and when to use each * Practical ways to get started even if you have little experience with patterns or refactoring Refactoring to Patterns reflects three years of refinement and the insights of more than sixty software engineering thought leaders in the global patterns, refactoring, and agile development communities. Whether you're focused on legacy or "greenfield" development, this book will make you a better software designer by helping you learn how to make important design changes safely and effectively.

AI导读
核心看点
  • 本书核心在于将重构与设计模式有机结合,提供从现有代码向模式演进的具体路径。作者详细记录了超过二十种基于模式的复合重构序列,展示了如何通过一系列低级别重构操作,安全地将设计调整为符合特定模式的结构,而非直接套用模式。
  • 书中强调渐进式改进的重要性,反对过度工程化。通过真实项目案例,演示了如何识别代码中的坏味道,并利用重构手段消除重复、简化复杂逻辑,使代码更清晰表达意图。这种自底向上的设计演化方法,有助于避免一开始就强行引入模式导致的架构僵化。
  • 内容涉及测试驱动重构的实践,强调在重构过程中保持测试覆盖率以降低风险。作者指出,重构是手段,模式是目的,二者在软件演化中天然关联。通过本书,读者可学习如何在维护既有系统时,逐步提升代码质量,实现从混乱代码到整洁架构的过渡。
适合谁读
  • 适合具备一定重构基础和设计模式知识的中级及以上软件工程师。读者需熟悉《重构》一书中的基本重构手法,并了解GoF设计模式的基本概念。若对重构或模式缺乏了解,阅读本书会感到吃力,建议先补充相关基础知识,否则难以理解书中复杂的复合重构步骤。
  • 适合正在维护遗留系统或面临代码质量下降问题的开发者。本书提供的模式导向重构技巧,能帮助读者在不破坏现有功能的前提下,改善代码结构,解决全局变量滥用、逻辑混乱、难以维护等实际问题。对于希望提升代码可维护性和扩展性的团队,本书具有极高的实用价值。
  • 适合对软件架构演进感兴趣,希望理解如何避免过度设计的开发者。本书倡导的渐进式改进理念,有助于纠正‘一开始就追求完美架构’的错误观念。读者可通过学习书中的案例,理解如何在实际项目中平衡快速交付与代码质量,避免陷入过度工程化的陷阱。
读前提醒
  • 阅读前务必确保已掌握《重构》中的基本重构手法及设计模式知识。本书内容较为深入,假设读者已具备相关基础。若基础薄弱,建议先阅读Martin Fowler的《重构》和GoF的《设计模式》,否则将无法理解书中复杂的重构序列和模式转换逻辑,阅读体验将大打折扣。
  • 建议结合代码实践进行阅读,切勿仅停留在理论层面。书中案例基于真实项目,但部分源码可能存在缺失或错误,读者需自行寻找完整代码或参考其他资源。同时,注意书中翻译版本可能存在语病和标点错误,建议有条件者阅读英文原版,以确保理解准确,避免因翻译问题产生误解。
  • 不要试图将书中的重构序列机械套用到所有场景。每个项目的上下文不同,盲目套用模式可能导致过度设计。读者应重点学习作者分析代码坏味道、识别重构机会的思维过程,理解为何选择特定重构路径,而非死记硬背步骤。在实践中灵活运用,结合测试驱动开发,确保重构安全。
读者共识
  • 读者普遍认为本书是连接《重构》与《设计模式》的重要桥梁,提供了从混乱代码向整洁架构演进的具体指导。尽管部分读者认为其原创性有限,但多数认可其在模式导向重构领域的独特价值。对于有经验的开发者,本书提供了宝贵的实践经验和思维启发,有助于提升代码质量和架构设计能力。
  • 部分读者批评本书翻译质量较差,存在大量语病、标点错误及长句不通顺的问题,严重影响阅读体验。此外,书中部分源码缺失或存在错误,给读者实践带来障碍。建议读者谨慎选择版本,优先阅读英文原版,或结合其他优质资源进行学习,以避免因翻译和代码问题导致的学习挫折。
  • 读者共识认为,本书不适合初学者入门,也不应作为重构或模式的唯一学习资源。其价值在于为有经验的开发者提供高级重构技巧,帮助其在实际项目中解决复杂代码问题。同时,读者强调应避免过度设计,坚持渐进式改进,将重构作为日常开发的一部分,而非一次性的大规模重构行动。

本导读基于书籍简介、目录、原文摘录、短评和书评生成,不等同于全文精读。

精彩摘录
  • "设计不足产生原因有如下几种: 程序员没有时间,没有抽出时间,或者时间不允许进行重构; 程序员在何为好的软件设计方面知识不足; 程序员被要求在既有系统中快速地添加新功能; 程序员被迫同时进行太多项目。 随着时间的推移,设计不足的软件将变成昂贵、难以维护甚至无法维护的大麻烦。"
  • "数据结构的构造非常随意,甚至近乎不存在。任何东西都要与其他东西通信。所有重要的状态数据都可能是全局的。在状态信息被隔开的地方,需要通过错综复杂的后端通道杂乱地传递,以绕开系统的原有结构。 变量名和函数名信息量不足,甚至会起误导作用。函数可能使用大量全局变量以及定义模糊的冗长的参数列表。函数本身冗长,费解,完成多项毫无关联的任务。代码重复很多。控制流很难看清,难以找到来龙去脉。程序员的意图几乎无法理解。代码完全不可读,近乎难于破译的天书。代码中有很多经过多个维护者之手不断修修补补留下的明显印记,这些维护者几乎都没有理解自己的修补会造成怎样的后果。 虽然你开发的系统也许不会这么恐怖"
  • "减少或去除重复的地方,简化复杂之处,使代码更好地表达其意图。"
用户评论
原创性的想法少,或者在某些工程实践中堵住了再来按图索骥会觉得好吧。个人更推荐Michael Feathers的那本Working Effectively with Legacy Code。
立意很好,可总觉得这书写得太晦涩了,另外书中本就残缺的源码竟然网上没有完整的免费下载!
连接起Martin Fowler之Refactoring与GoF之Design Patterns的桥梁。展现了如何在重构过程中运用模式的经验,不过模式类的书始终需要实践才能学得通。
在《重构》的基础上进一步阐述了重构和模式之间的关系,并提供了向模式重构的思路和步骤,非常赞的一本书!
重构一书里已有通过重构引入模式的内容,不觉得这本书有必要。
收藏