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

代码重构阅读心得[转]

阅读更多
  最近阅读Martin Flower的《重构》,对自己有许多启发,以前认为一些正确的观点现在看来也不那么正确了;同时发现对重构的理解只有在阅读了书之后更加彻底;在阅读《重构》之后我对其中几点有点感触:
  1. 在没有具体阅读《重构》之前,我认为重构就是将代码变的容易理解,容易维护,但在阅读了《重构》之后才发现重构不仅可以利用到重新构造已有的代码,也可以帮助我们在阅读代码的过程中增加我们的对代码理解的速度。其实我想每个学习编写代码的同行都在学习的过程中阅读过别人的代码,然后还有可能将别人的代码拿到计算机上编译运行来查看结果表现。实际上我认为这在某种意义上属于重构,只是重构的粒度有多大,或许你修改别人的代码一部分来查看修改的结果,从而帮助自己掌握软件中的更多特性,或者说让自己修改的代码表现出原来的功能。Martin Flower说的就是如此,我们如果没有得到别人完整的文档,那我们怎么样才能理解别人的代码来,好的办法就是我们一边阅读别人的代码,一边部分部分的修改他人的代码,然后测试每次修改的结果与以前的结果是否一样,如果一样,那么你的重构代码是正确,那么你肯定能够理解你自己写的代码吧(自己都不理解自己的代码就不要干了);别人的代码就这样在我们一部分一部分重构当中被我们理解了。
  2. 以前我们写代码的时候喜欢设计,设计的我们认为很详细了,然后开始将所有的功能模块都写完,接着再调试,在调试的过程中我们可能花费比写代码长的多的时间。是的,因为你在运行一个复杂的东西,当然不容易搞定了。Martin Flower认为我们调试的时间可以不用那么长,原因是我们不能在写完了一个复杂系统的时候再调试,我们可以先建立一个好的测试用例,在写这个测试用例的过程中我们更能对整个系统了解,也能够帮助我们写代码;然后我们一点点的写,写一部分测试一下,保证每次新写的代码都能正确运行,从而当代码写完了,系统调试也完毕了。这样的情况下可以认为我们没有在调试上花时间,我们把时间花在测试和编写代码上了。
  3. 以前认为代码当中注释越多越好。Martin Flower又一次给我们教训说,写注释是因为你的代码已经不能告诉代码阅读者他的真实意思了。是的,好的代码可以通过很多方式表达其自身的含义,例如变量的名称,函数的名称等;就如一个比较条件判断来说吧,我们有必要的情况下将这个即使很短的条件抽取一个方法,然后用方法名称来告诉读者判断的真实意义,如果这里直接使用条件判断就要让读者迷惑半天,当然这里的前提是给变量和函数起一个合适的名字,这是考验程序员真功夫的地方了。另外,这里说的不是说写注释不好,如我的目的是如果代码可以描述意义了,注释就不需要写了,这样就让你省了一件事情:保证代码和注释的同步,这不是更好。
  4. 在之前我也认为重构会花费很大代码,因为我们要理解代码,重新编写;但为了修改BUG,Martin Flower告诉我们重构是最快的。也许不相信,我也不相信,但他说的有道理,容易修改的BUG,当然早就被修改了,那么剩下的BUG就很难找了,主要因为代码中的逻辑不清楚,重构可以改变这种情况,让我们的代码有条有理,那么当然BUG就无处藏身了。
  5. 勇于接受变化。以前认为用户频繁的变化需求是不可理喻,实际上是我们自己不可理喻,他们花钱当然需要能提供高质量的服务;而Martin Flower认为不用怕改变,我们有重构工具,重构可以让我们代码任何时候都是清楚的,容易修改的,那么变化是件快乐的事情不再象以前那样艰难了。
  6. 重构与性能不是是对立的。重构让代码容易理解,而性能让代码变的难以理解,不过我们在开始的时候应该考虑怎么样让代码容易理解和维护,这样我们可以在后面适当的时候对代码的某部分进行轻松的性能改进工作。本人做性能改进工作有段时间了,想从庞大的杂乱无章的、不熟悉的代码中找出性能的bottleneck的确不是一件容易的事情,我需要的是理解代码,理解流程,那么如果一个结构很好的代码对于我来说就好对付多了。因此他们不是对立的,性能以重构为基础的。

  其实通过重构,最主要的目的是让我们的代码更清晰,更轻巧,更容易被维护,那么也就是我们有良好的代码,于是我们还惧怕什么,什么都可以轻松搞定。同样《重构》认为代码随时都是清晰的、轻巧的,一般你的代码不再具有以上特点,那么我们就需要使用重构了。

分享到:
评论

相关推荐

    重构 改善既有代码的设计

    重构,一言以蔽之,就是在不改变外部行为的前提下,有条不紊地改善代码。...《重构:改善既有代码的设计》适合软件开发人员、项目管理人员等阅读,也可作为高等院校计算机及相关专业师生的参考读物。

    WEB标准心得之网页重构的思路

    最近终于有心情把我的CSS重构一下。。由于这种写法的一部分是我自己琢磨出来的,带有偏好的做法。

    页面细节处理心得

    一个页面的细节,从重构的角度去看,页面的精细度,代码的可读性、扩展性,为下游服务的代码注释,交互接口样式的书写,代码的压缩,图片的优化等都可以归为细节处理。一个页面的细节,从重构的角度去看,页面的精细...

    关于JavaScript命名空间的一些心得

    最近重构东西,碰到命名空间的设定,搜了一些知识,请教了一些高手,把自己的心得写下来相信大家都知道,window是顶级的,这里就不写window了,先忽略1:关于顶级 代码如下:var ns = ns || {};可以看到,其实就是...

    asp.net知识库

    技术基础 New Folder 多样式星期名字转换 [Design, C#] .NET关于string转换的一个...C#+ASP.NET开发基于Web的RSS阅读器 ASP.NET RSS Toolkit(RSS工具) Serialize Your Deck with Positron [XML Serialization, XSD, C#]...

    component-html-engine-demo:前端工程化过程中组件JS和HTML的处理demo

    最近在重构公司一个项目的前端部分,对前端的工程化也有一些心得。html在组件话过程中是个特殊的东西,这篇文章就记录下,组件话时候对html处理的一些心得。组件html和javascript前后端分离维护那时还是一名前端小菜...

    《.NET实践之旅 C#篇》黄凯波著

    书中所有的关键技术术语也会在括号中给出对应的英文单词,以方便读者阅读及搜索外文资料。 本书针对因工作等需要使用c#(.net framework)来完成软件项目的人群,可供c#编程人员参考,也可作为大中专院校使用c#进行...

    Java23种设计模式(Patterns in Java)

    在真正可复用的面向对象编程中,GoF 的《设计模式》为我们提供了一套可复用的面向对象技术,再配合 Refactoring(重构方法),所以很少存在简单重复的工作,加上 Java 代码的精炼性和面向对象纯洁性(设计模式是java 的灵魂...

    matlab源码求一元函数-yhxRoboticsToolbox:C++机器人工具箱,缓慢进行中。参考:[1]KevinMLynch,Fran

    之前还在思考如何用类、设计模式来设计我的这个机器人库,后来发现这样有点太浪费时间了,不如先以函数的形式写好大部分功能,然后再系统的学习一下设计模式,再开始重构一下代码,合理OOP。新增了以下功能: Skew:...

    设计模式(Patterns in Java)

    象技术,再配合Refactoring(重构方法),所以很少存在简单重复的工作,加上Java 代码 的精炼性和面向对象纯洁性(设计模式是java 的灵魂),编程工作将变成一个让你时刻体 验创造快感的激动人心的过程. 为能和大家能共同...

    如何对react hooks进行单元测试的方法

    因此必须要编写单元测试来确保业务逻辑的正确性以及重构时代码的可维护性与稳定性,之前的项目使用的是 react@15.x 的版本,使用 enzyme 配合 jest 来做单元测试毫无压力,但新项目使用的是 react@16.8 ,编写单元...

    webpack构建vue项目的详细教程(配置篇)

    最近公司要求用vue重构项目,还涉及到模块化开发,于是乎,我专门花了几天的时间研究了一下webpack这个目前来看比较热门的模块加载兼打包工具,发现上手并不是很容易,现将总结的一些有关配置的心得分享出来,欢迎...

    二十三种设计模式【PDF版】

    在真正可复用的面向对象编程中,GoF 的《设计模式》为我们提供了一套可复用的面向对象技术,再配合 Refactoring(重构方法), 所以很少存在简单重复的工作,加上Java 代码的精炼性和面向对象纯洁性(设计模式是 java 的...

Global site tag (gtag.js) - Google Analytics