无名图书
收藏
Refactoring to Patterns
Joshua Kerievsky
出版社
Addison-Wesley Professional
出版时间
2004-08-15
ISBN
9780321213358
评分
★★★★★
书籍介绍
这本书最核心的洞见,是把'设计模式'从高高在上的静态标本,还原成'重构'这条演化长河里的一个个落脚点。作者不教你背诵模式,而是演示如何在已有代码的泥泞里,安全地一步步走向模式。读者反复提到:它像一座桥,把 Fowler 的《重构》和 GoF 的《设计模式》真正焊在一起。但争议也正源于此——它假设你已经读过这两本基础书,否则容易觉得晦涩;也有人质疑《重构》里已提及相关内容,本书必要性存疑。它适合那些'写过烂代码、见过设计腐化'的中级开发者:书中对设计如何一步步塌成'近乎天书'的描摹,几乎人人都能认领自己的项目。它不是入门手册,而是一本关于'如何在既有系统里优雅地补完设计'的实践指南。
AI导读
核心看点
本书核心在于将重构与设计模式有机结合,提供从现有代码向模式演进的具体路径。作者详细记录了超过二十种基于模式的复合重构序列,展示了如何通过一系列低级别重构操作,安全地将设计调整为符合特定模式的结构,而非直接套用模式。
书中强调渐进式改进的重要性,反对过度工程化。通过真实项目案例,演示了如何识别代码中的坏味道,并利用重构手段消除重复、简化复杂逻辑,使代码更清晰表达意图。这种自底向上的设计演化方法,有助于避免一开始就强行引入模式导致的架构僵化。
内容涉及测试驱动重构的实践,强调在重构过程中保持测试覆盖率以降低风险。作者指出,重构是手段,模式是目的,二者在软件演化中天然关联。通过本书,读者可学习如何在维护既有系统时,逐步提升代码质量,实现从混乱代码到整洁架构的过渡。
读者共识
读者普遍认为本书是连接《重构》与《设计模式》的重要桥梁,提供了从混乱代码向整洁架构演进的具体指导。尽管部分读者认为其原创性有限,但多数认可其在模式导向重构领域的独特价值。对于有经验的开发者,本书提供了宝贵的实践经验和思维启发,有助于提升代码质量和架构设计能力。
部分读者批评本书翻译质量较差,存在大量语病、标点错误及长句不通顺的问题,严重影响阅读体验。此外,书中部分源码缺失或存在错误,给读者实践带来障碍。建议读者谨慎选择版本,优先阅读英文原版,或结合其他优质资源进行学习,以避免因翻译和代码问题导致的学习挫折。
读者共识认为,本书不适合初学者入门,也不应作为重构或模式的唯一学习资源。其价值在于为有经验的开发者提供高级重构技巧,帮助其在实际项目中解决复杂代码问题。同时,读者强调应避免过度设计,坚持渐进式改进,将重构作为日常开发的一部分,而非一次性的大规模重构行动。
精彩摘录
"
设计不足产生原因有如下几种: 程序员没有时间,没有抽出时间,或者时间不允许进行重构; 程序员在何为好的软件设计方面知识不足; 程序员被要求在既有系统中快速地添加新功能; 程序员被迫同时进行太多项目。 随着时间的推移,设计不足的软件将变成昂贵、难以维护甚至无法维护的大麻烦。
"
"
数据结构的构造非常随意,甚至近乎不存在。任何东西都要与其他东西通信。所有重要的状态数据都可能是全局的。在状态信息被隔开的地方,需要通过错综复杂的后端通道杂乱地传递,以绕开系统的原有结构。 变量名和函数名信息量不足,甚至会起误导作用。函数可能使用大量全局变量以及定义模糊的冗长的参数列表。函数本身冗长,费解,完成多项毫无关联的任务。代码重复很多。控制流很难看清,难以找到来龙去脉。程序员的意图几乎无法理解。代码完全不可读,近乎难于破译的天书。代码中有很多经过多个维护者之手不断修修补补留下的明显印记,这些维护者几乎都没有理解自己的修补会造成怎样的后果。 虽然你开发的系统也许不会这么恐怖
"
"
减少或去除重复的地方,简化复杂之处,使代码更好地表达其意图。
"
用户评论
原创性的想法少,或者在某些工程实践中堵住了再来按图索骥会觉得好吧。个人更推荐Michael Feathers的那本Working Effectively with Legacy Code。
立意很好,可总觉得这书写得太晦涩了,另外书中本就残缺的源码竟然网上没有完整的免费下载!
连接起Martin Fowler之Refactoring与GoF之Design Patterns的桥梁。展现了如何在重构过程中运用模式的经验,不过模式类的书始终需要实践才能学得通。
在《重构》的基础上进一步阐述了重构和模式之间的关系,并提供了向模式重构的思路和步骤,非常赞的一本书!
重构一书里已有通过重构引入模式的内容,不觉得这本书有必要。
Addison-Wesley Professional的其他书籍
查看全部
Domain-Driven Design Distilled
Vaughn Vernon
Learning to Program
Steven Foote
Real-Time 3D Rendering with DirectX and HLSL
Varcholik, Paul
The CERT® C Coding Standard, Second Edition
Robert C. Seacord
OpenGL ES 3.0 Programming Guide
Dan Ginsburg
Advanced Programming in the UNIX Environment, 3rd Edition
W. Richard Stevens, Stephen A. Rago
求书
收藏