`
reniaL
  • 浏览: 93481 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

《重构》

阅读更多
Martin Fowler
用一个词来形容作者 Martin Fowler,那就是牛逼!他是作家,演说家,企业应用架构专家,敏捷宣言发起人之一。专注于OO、UML、领域建模和敏捷软件开发。他写的《重构》出版于1999年,《企业应用架构模式》出版于2002年,都可以算是程序员必读的书。

Refactoring
对《重构》心仪已久,某天见到同事带了一本到公司,还是英文版的,就马上抢了过来读。这是除了大学教材之外,我第一次完整地读完一本英文技术实体书。读完之后我才发现,网上有个在线版,内容基本与实体书一致。

全书可以划分为三大部分:第一部分讲解了重构的基础,包括一个例子、一些原则、code smell讲解和如何构建测试;第二部分是重点,讲解了各种重构方法;第三部分是关于重构的其它一些话题,例如大型重构、重构工具等。

整本书读下来,我觉得收益最大的,就是知道了各种各样的 code smell 和相应的重构解决方法。以后在写新代码时,在一些细节设计上可以规避已知的这些 code smell 问题,提高代码质量。在维护旧代码时,也能记起,哦,这个问题可以用XX方法来重构解决~

要说缺点的话,我觉得作者对每个重构方法都详尽地列出了操作步骤,似乎有些冗长。我不知道是否有人真的完全按照作者的步骤去做重构,反正我一般都没有做得那么细,可能工具的支持比较好吧,Eclipse 的重构功能真的很好用。
本文就不列出那些 code smell 和重构方法了,只记一些重构相关的原则。

什么是重构
重构就是为了让软件更易于理解和维护,对软件的内部结构进行的、不影响外部行为的修改。

这个定义有两个重点:目标是“让软件更易于理解和维护”,所作的修改必须“不影响外部行为”。

为何做重构
  • 重构能改进软件设计。随着代码被修改,软件的设计会慢慢退化,会过时。重构能让代码保持其原来的结构。
  • 重构让软件更易于理解。我们写代码时总是不考虑代码的后续维护者,致使代码难于理解。
  • 重构能帮你找bug。因为重构让代码变得更清晰,清晰的代码更便于发现问题。
  • 重构能提高编程效率。重构可能会降低你目前的开发效率,但它能提高你以后的开发效率,物有所值。
何时做重构
  • “三振出局”原则:第一次写一段代码,就直接写。第二次又写这段代码,你要皱一下眉头,但还是可以照常写。第三次还是写这段代码,那你就得重构了。
  • 当增加功能时,重构。
  • 当修 bug 时,重构。
  • 做代码审查时,重构。
  • 何时不应重构?问题太多的代码,最好直接重写。因为重构的代价很可能比重写还大。
重构的其它一些原则
  • 重构的第一步永远都相同:为被重构代码编写一组可靠的自动化测试。人始终会犯错,而测试是避免错误的好方法。注意,必须是“自动化”的测试。
  • 重构时应该小步前进,频繁地运行测试,这样当出现问题时就能快速定位。
  • 进行重构时,不要增加新功能,反之亦然。
  • 用“易于重构”的设计代替“十分灵活”的设计,能让设计简化,降低成本。
  • 一般来说,重构都会让程序变慢(例如有更多的方法层级、更多的循环)。但经过重构,代码会更清晰,也就更易于优化性能。
8
1
分享到:
评论
3 楼 李永成 2012-12-18  
学习了,很好啊爱哈哈
2 楼 dwbin 2012-12-17  
一般而言是一边写一边重构,如果牵扯到别人的类跟方法调用的话就进行util工具封装,而且在重构的过程中要保证代码的结构统一,比如在某一种逻辑上使用了观察者这种设计模式,那么类似的地方最好统统使用这种模式,这样的话对别人理解你的代码会有很大的帮助的。
1 楼 kidneyball 2012-12-17  
重构是目前避免过度设计(过度使用设计模式)的最有效的方法。
马丁叔叔在推广重构的过程中功不可没。

说到《企业应用架构模式》,其实马丁叔叔本来还有计划写一本《深入企业应用设计模式》(Further Patterns of Enterprise Application Architecture),可惜原稿更新到2006年就停了,不知何故。原稿可以在 http://martinfowler.com/eaaDev/ 看,里面有些文章颇不错。

相关推荐

    用于信号的EMD、EEMD、VMD分解_vmd重构_故障诊断emd_故障诊断_故障重构_VMD信号重构

    资源名:用于信号的EMD、EEMD、VMD分解_vmd重构_故障诊断emd_故障诊断_故障重构_VMD信号重构 资源类型:matlab项目全套源码 源码介绍:用于信号的分解、降噪和重构,实现故障诊断 源码说明: 全部项目源码都是经过...

    三维重构 、基于切片的三维重构 、三维重构的缺陷检测 ,matlab GUI界面的形式

    三维重构 可以检测有效的系统缺陷,进行缺陷的定位,缺陷体积的测量等,如何进行三维重构(3D reconstuction)的输入是各种三维以下的数据,比如纯二维的RGB图像(序列)、带有深度信息的RGBD数据等,出来的是三维...

    重构 改善既有代码的设计 中文高清完整版pdf

    《重构 改善既有代码的设计》清晰揭示了重构的过程,解释了重构的原理和实践方式,并给出了何时以及何地应该开始挖掘代码以求改善。书中给出了70 多个可行的重构,每个重构都介绍了一种经过验证的代码变换手法的动机...

    重构-改善既有代码的设计

    一直很喜欢重构这本书,但是由于自己记性不太好,书看过之后其中的方法总是记不住,于是想如果有电子版的重构书就好了,工作中遇到重构的问题可以随时打开查阅。在网上搜索了许久,发现重构这本书有英文chm版本的,...

    重构-改善既有代码的设计 中文版.pdf

    第1章 重构,第一个案例 1.1 起点 1.2 重构的第一步 1.3 分解并重组Statemen 1.4 运用多态取代与价格相关的条件逻辑 1.5 结语 第2章 重构原则 2.1 何谓重构 2.2 为何重构 2.3 何时重构 2.4 怎么对经理说 2.5 重构的...

    重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt

    重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt

    【EMD重构】.rar_EMD重构函数_IMF变量重构_tomorrowi4n_模态分解_重构

    对经验模态分解后的各分量IMF进行重构代码,函数可直接调用。

    《重构改善既有代码的设计(中文版)》(Martin Fowler[美] 著,候捷、熊节 译)

    Martin Fowler和《重构:改善既有代码的设计》(中文版)另几位作者清楚揭示了重构过程,他们为面向对象软件开发所做的贡献,难以衡量。《重构:改善既有代码的设计》(中文版)解释重构的原理(principles)和最佳实践...

    配电网重构的研究与发展

    对国内外有关配电网重构技术的文献进行综述。重点介绍了五类典型的目标函数:以提高稳定性和可靠性为目标,以故障恢复时间最短为目标,以负荷均匀分布为目标,以系统有功损耗最小为目标和系统能量损失最小为目标。并介绍...

    数据库重构下部(PDF)

    首次专门讨论数据库重构,向数据专业人员展示了如何运用重构、测试驱动及其他敏捷技术进行演进式数据库开发。书中通过许多实际例子,详细说明了数据库重构的过程、策略以及部署。. 本书前5章介绍了演进式数据库开发...

    重构与模式.pdf

    《重构与模式》开创性地深入揭示了重构与模式这两种软件开发关键技术之间的联系,说明了通过重构实现模式改善既有的设计,往往优于在新的设计早期使用模式。《重构与模式》不仅展示了一种应用模式和重构的创新方法,...

    项目重构方案模板、ppt

    项目重构方案模板、项目重构方案模板ppt,项目重构方案计划模板

    重构(Refactoring)英文版

    重构英文版 M. Fowler, K. Beck, J. Brant, W. Opdyke and D. Roberts 重构(Refactoring)是指在不改变软件系统外部功能的前提下,对软件系统的内部结构重新设计,以提高代码的可复用性和可扩展性等质量。本书是...

    代码重构(C# & ASP.NET版),中文完整扫描版

    重构是迅速发现并修复有问题的代码的一种高效的方式。在《代码重构(C#&ASP.NET版)》中首次提供了在c#和asp.net中进行重构的专业方法,您将学习如何运用重构技术管理和修改代码。此外,还将学习如何从头开始构建原型...

    bpr重构r重构r重构r重构r重构

    r重构r重构r重构r重构r重构r重构r重构r重构r重构

    重构_改善既有代码的设计 熊杰译

    《重构:改善既有代码的设计》清晰地揭示了重构的过程,解释了重构的原理和最佳实践方式, 并给出了何时以及何地应该开始挖掘代码以求改善。 书中给出了70多个可行的重构,每个重构都介绍了一种经过验证的代码变换...

    一维信号的分解和重构的Mallat分解与重构算法(matlab)

    本实验利用MATLAB2015进行编程,调用系统小波函数对信号进行分解,实现Mallat分解与重构算法对一维信号进行多层分解和重构。对信号进行多层分解可实现对信号的去噪和数据压缩处理,分解为小波函数的线性组合,阶数高...

    重构_重构_改善既有代码_

    重构——改善既有代码设计,经典文档,架构师必须教程

Global site tag (gtag.js) - Google Analytics