`
reniaL
  • 浏览: 94117 次
  • 性别: 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重构】.rar_EMD重构函数_IMF变量重构_tomorrowi4n_模态分解_重构

    标题中的"【EMD重构】.rar"指的是包含EMD重构过程的压缩文件,而"EMD重构函数"是指在处理EMD分解后的IMF分量时使用的特定函数。"IMF变量重构"则是指将分解得到的各个IMF重新组合成原始信号的过程。"tomorrowi4n"可能...

    几种常见的稀疏重构算法代码.rar_FOCUSS重构_Focuss算法_focuss稀疏重构_压缩感知算法_稀疏重构

    在IT领域,稀疏重构算法是信号处理和数据科学中的一个重要概念,特别是在压缩感知理论(Compressive Sensing, CS)中。压缩感知是一种革命性的理论,它表明,如果一个信号可以用较少的非零元素(即稀疏表示)来描述...

    重构(Refactoring)英文版

    ### 重构(Refactoring):改善现有代码的设计 #### 一、重构概念解析 重构(Refactoring)是一种软件工程中的重要技术,它指的是在不改变软件系统外部行为的前提下,通过改进其内部结构来提高代码质量的过程。重构...

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

    《重构:改善既有代码设计》是一本由Martin Fowler所著的经典IT著作,它详细阐述了在软件开发过程中如何通过重构来提升代码质量、可读性和维护性。重构是一种系统性的方法,旨在不改变软件外在行为的前提下,改进其...

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

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

    Matlab重构算法_matlab_matlab压缩感知重构算法程序实现_压缩感知_

    在本文中,我们将深入探讨基于Matlab的压缩感知(Compressive Sensing,简称CS)重构算法的实现。压缩感知是一种理论先进的信号处理方法,它允许我们以远低于奈奎斯特定理所要求的采样率捕获信号,并能恢复原始信号...

    相空间重构,相空间重构理论,matlab

    相空间重构是复杂系统动力学研究中的一个重要方法,它通过从单变量的时间序列数据中恢复出系统的多维相空间,从而揭示系统的行为特征。在MATLAB中,我们可以利用各种算法来实现这一过程,以深入理解非线性系统的动态...

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

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

    33节点系统重构程序实现_33节点重构_33节点配电网重构_配电网IEEE—33_配电网_33节点

    在电力系统领域,33节点系统重构是一种针对配电网优化设计的方法,主要应用于小型到中型的配电网络。本文将详细解析33节点系统重构的实现过程及其在IEEE-33节点配电网中的应用。 首先,33节点系统通常代表一个具有...

    重构改善既有代码的设计PPT课件

    重构是软件开发过程中的一个重要环节,它关注于改善已有代码的设计,以提高代码的可读性和维护性,同时保持原有功能不变。通过重构,程序员能够更有效地管理代码,提升开发效率,减少错误,并促进团队成员之间的沟通...

    [电子书] 重构与模式

    Addison-Wesley Professional出版社出版的《重构与模式》一书,正是从理论和实践两个层面探讨了重构和设计模式的结合应用。 重构是一种编程技巧,它允许开发者在不改变软件外部行为的前提下,改善软件内部结构。...

    配电网重构_配电网_配电网重构_电网重构_非线性优化_配电网络重构_

    配电网重构是电力系统领域中的一个重要研究课题,它涉及到电力系统的稳定运行与经济效率。配电网重构的目标是在满足一系列约束条件下,通过改变开关状态,优化网络结构,以达到提高供电可靠性、降低运营成本、改善...

    POD.rar_POD 重构_POD正交分解_we75t_本征正交分解_流场重构

    在这个主题中,"POD.rar_POD 重构_POD正交分解_we75t_本征正交分解_流场重构" 提到了一种名为“主成分分析”(Principal Component Analysis,PCA)在流体力学中的应用,通常称为“正交分解”(Proper Orthogonal ...

    Martin Fowler《重构——改善既有代码设计》(中文版)

    《重构——改善既有代码设计》是软件工程领域的一部经典著作,作者Martin Fowler,该书与《设计模式》被并称为软件工程的双雄。《重构》一书的主旨在于向读者展示重构的过程与方法,即通过一系列小的、有步骤的改变...

    一本介绍如何将现有的 Java 代码重构为 Kotlin 代码的书籍

    ### 《从Java到Kotlin:重构指南》关键知识点总结 #### 一、书籍概述与目标读者 本书《从Java到Kotlin:重构指南》由Duncan McGregor与Nat Pryce共同编写,是一本专为已经熟悉Java编程语言并希望将其现有代码转换...

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

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

    ZYNQ 实现PL动态重构

    本文将深入探讨如何利用ZYNQ实现PL动态重构这一关键技术,旨在提升系统的灵活性和效率。 动态重构是指在系统运行过程中,根据需求变化对硬件结构进行重新配置,从而实现不同功能或者优化性能。在ZYNQ平台上,这种...

Global site tag (gtag.js) - Google Analytics