`
liuwei1981
  • 浏览: 752848 次
  • 性别: Icon_minigender_1
  • 来自: 太原
博客专栏
F8258633-f7e0-30b8-bd3a-a0836a5f4de5
Java编程Step-by...
浏览量:156234
社区版块
存档分类
最新评论

重构的目的

 
阅读更多

重构不是包治百病的万灵丹,绝对不是所谓的“银弹”。不过它的确很有价值,可以帮助你始终良好的控制自己的代码。

 

重构是个工具,用于以下几个目的:

 

1.重构改进软件设计

 

如果没有重构,程序的设计会逐渐腐坏。当人们只为短期目的,或是在完全理解整体设计之前,就贸然修改代码,程序将逐渐失去自己的结构,程序员愈来愈难通过阅读源码来理解原来的设计。重构很像在整理代码,你所做的就是让所有东西回到应处的位置上。代码的结构的流失是累积性的。愈难看出代码所代表的设计意图,就愈难保护其中设计,于是该设计就腐烂的愈快。经常性的重构可以帮助代码维持自己该有的形态。

 

完成同样一件事情,设计不良的程序往往需要更多的代码,这常常是因为代码在不同的地方使用完全相同的语句在做同样的事情。因此改进设计的一个重要方向就是消除重发代码。这个动作的重要性在于方便未来的修改。代码量减少并不会使系统运行更快,因为这对程序的运行计划没有任何明显的影响。然而代码量的减少将使未来可能的程序修改动作容易的多。代码愈多,正确的修改就愈难,因为有更多的代码需要理解。你在这儿做了点修改,系统却不如预期的那样工作,是因为你没有修改另一处——那儿的代码做着几乎完全一样的事情,只是所处的环境略有不同。如果消除重复代码,你就可以确定所有事物和行为在代码中只表述一次,这正是优秀设计的根本。

 

2.重构使软件更容易理解

 

所谓程序设计,很大程度上就是与计算机交谈:你编写的代码告诉计算机做什么事,它的响应则是精确按照你的指示行动。你得及时填补“想要它做什么”和“告诉它做什么”之间的缝隙。这种编程模式的核心就是“准确说出我所要的”。除了计算机外,你的源码还有其他读者:几个月之后可能会有另一位程序员尝试读懂你的代码并做一些修改。我们很容易忘记这第二位读者,但他才是最重要的。计算机是否多花了几个小时编译,又有什么关系呢?如果一个程序员花费一周时间;来修改某段代码,那才要命呢——如果他理解了你的代码,这个修改原本只需要一个小时。

 

问题在于,当你努力让程序运转起来的时候,不会想到未来出现的那个开发者。是的,我们应该改变一下开发节奏,对代码做适当修改,让代码变得更容易理解。重构可以帮助我们让代码更易读。一开始进行重构的时候,你的代码能正常运行,但结构不够理想。在重构上花一点点时间,就可以让代码更好的表达自己的用途。这种编程模式核心就是准确的说出我所要的。

 

3.重构帮助找到bug

 

对代码的理解,可以帮助找到bug。如果对代码进行重构,可以深入理解代码的作为,并恰到好处的把新的理解反馈回去。搞清楚程序结构的同时,也清楚了自己所做的一些假设。

 

Kent Beck说过一句话:我不是个伟大的程序员,我只是个有着一些优秀习惯的程序员。重构能帮助更有效的写出强健的代码。

 

4.重构提高编程速度

 

重构帮助你更快速的开发程序。

 

听起来有点违反直觉。当谈到重构时候,人们很容易看出它能够提高质量。改善设计、提高可读性、减少错误,这些都是提高质量。

 

但很重要的是,良好地设计师快速开发的根本——事实上,拥有良好的设计才可能做到快速开发。如果没有良好的设计,或许某一段时间内你的进展神速,但恶劣的设计很快让你的速度慢下来。你会把时间放在调试上,无法添加新功能。修改时间越来越长,因为你必须花越来越多的时间去理解系统、寻找重复代码。随着你给最初程序打上一个又一个补丁,新特性需要更多的代码才能实现。这是恶性循环。

 

良好的设计师维持软件快速开发的根本。重构可以帮助你更快速的开发软件,因为它阻止了系统腐烂变质,甚至还可以提高设计质量。

分享到:
评论

相关推荐

    27丨理论一:什么情况下要重构?到底重构什么?又该如何重构?1

    1. 重构的目的:为什么重构(why) 2. 重构的对象:重构什么(what) 3. 重构的时机:什么时候重构(when) 4. 重构的方法:如何重构(how)

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

    一直很喜欢重构这本书,但是由于自己记性不太好,书看过之后其中的方法总是记...免责声明:本书仅供个人学习研究之用,不得用于任何商业目的,不得以任何方式修改本作品,基于此产生的法律责任本人不承担任何连带责任。

    重构与设计模式

    内部培训资料 重构与设计模式

    网站重构 (经典 全)

    网站重构 css+div (经典 全) 本书着重分析了目前网站建设中存在的一些问题,以及“Web标准”思想的产生、发展和推广,并从技术细节上讲解了网站实际制作和开发的过程中如何向Web标准过渡,如何采用和符合Web标准。...

    教育目的德育重构论文.doc

    教育目的德育重构论文.doc

    (原创)重构-改善既有代码的设计 chm 中文版

    一直很喜欢重构这本书,但是由于自己记性不太好,书看过之后其中的方法总是记...免责声明:本书仅供个人学习研究之用,不得用于任何商业目的,不得以任何方式修改本作品,基于此产生的法律责任本人不承担任何连带责任。

    重构-改善既有代码质量

    重构-改善既有代码质量-中文版本。 重构概述 什么是重构? 重构是对软件内部结构的一种调整,目的...

    beautiful-code-vs-mr-oldtype:jQuery 重构和使用 testium 的 E2E 测试

    目的 为了更容易查看特定版本中的更改,请实施辅助“选择 A 列中的单选按钮将自动选择 B 列中的单选按钮,该单选按钮位于同一行下方。” 测试方法 使用E2E 测试检查状态是否已损坏并重构。 使用和npm start本地...

    基于状态构形矢量和状态构形矩阵的可重构模块星球机器人构形* (2007年)

    可重构模块星球机器人系统由母体和多个子机器人模块组成,单个模块可以独立运动和操作,多个模块可以重构组合成不同构形,模块采用非对称式轮手一体机构,具有姿态方位性和运动方向性,重构目的是组成在某种环境下更...

    论文研究-基于奇异值分解的压缩感知核磁共振图像重构算法.pdf

    针对传统压缩感知在核磁共振成像中存在着重构算法慢、成像时间长的...实验结果表明, 提出的奇异值方法在重构效果上能达到与小波稀疏变换法相近的峰值性噪比, 且能有效缩短图像重构时间, 达到加速核磁共振成像的目的。

    模块化自重构机器人自动对接与重构规划研究

    模块化自重构机器人最关键的特点是它有自动改变自身构型的能力,以使它们的构形 适应不同的任务和环境。其最基本的设计思想是从大量基本单元或模块中建立复杂的系 统。每个模块有独立的自由度且能够分享允许它们彼此...

    程序员该读的十本好书之《重构改善既有代码的设计》

    我的目的是告诉你如何以一种可控制且高效率的方式进行重构。你将学会这样的重构方式:不引入臭虫〔错误);并且有条不紊地改进程序结构、 按照传统,书籍应该以一个简介开头口尽管我也同意这个原则,但是我发现以概括...

    软件重构的思考与实践

    软件结构可以因为各种各样的原因而被改变,如进行打印美化、性能优化等等,但只有出于可理解性、可修改、可维护目的的改变才是软件重构(Refactoring)。

    面向移动场景的学术期刊服务重构框架与路径研究.pdf

    摘要【目的】移动互联网的发展使得学术交流体系发生结构性重塑,揭示该背景下学术期刊服务重构框架与实施路径, 在发挥学术期刊既有优势的前提下,积极开拓移动化服务。【方法】采用系统分析法,对学术期刊服务重构...

    反编译中数据类型重构技术研究

    反编译是软件逆向分析的重要手段...型传播方程,从而达到类型细化的目的;通过分析复杂数据结构的存储特点及寻址方式, 以等价类划分的思想求取复杂数据结构的内存布局,并以已得到基本类型来恢复复杂数据 结构的类型。

    论文研究-基于GReP通用可重构处理器的密码算子优化设计.pdf

    以提升通用可重构处理器在信息安全应用领域的处理能力与执行效率为目的,对序列、分组、公钥及哈希函数等四大类32种密码算法进行深入分析。通过各算法的热点、频度分析,对基本处理单元进行同构、同态、参数化设计,...

    p53基因对肺血管重构的保护作用

    p53基因对肺血管重构的保护作用,李刚,朱耀斌,目的:重度肺动脉高压(PAH)的病理改变与恶性肿瘤具有较大相似,本研究旨在探索抑癌基因p53在重度PAH肺血管重构中的可能作用。 方法�

    自发性高血压大鼠肾动脉中交感神经重构及相关性研究

    自发性高血压大鼠肾动脉中交感神经重构及相关性研究,喜杨,姚丹,目的 探讨高血压发生、发展过程中,肾动脉中交感神经重构及其与结构重构间的相关性。方法 以6周龄(高血压形成前期)、12周龄(高�

    西南交通大学-信号与系统-轨道移频信号的抽样与重构

    将此信号利用钢轨作为传输通道来控制通过信号机的显示,达到自动指挥列车运行的目的。 本资源包含两个word文档,其中为我个人的实验报告且内含代码 具体代码的解释请参考博客:...

    emd.rar_EMD_EMD小波_closely1u1_emd 分解 重构_地球物理

    经验模态分解(Empirical ...在噪声压制方面,EMD将含噪信号分解后,能够将信号中的噪声和有效信号在不同的固有模态函数(intrinsic mode function,IMF)中分离开来,通过合理地选择IMF重构信号,达到去除噪声的目的。

Global site tag (gtag.js) - Google Analytics