`
xiaodatao
  • 浏览: 17357 次
  • 性别: 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的确不是一件容易的事情,我需要的是理解代码,理解流程,那么如果一个结构很好的代码对于我来说就好对付多了。因此他们不是对立的,性能以重构为基础的。

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

分享到:
评论

相关推荐

    Refactoring To Patterns《重构与模式》英文版

    ### 重构与模式:理论与实践的融合 #### 书籍概览 ...通过阅读本书,读者不仅可以学到实用的重构技巧和设计模式的应用方法,还能了解到如何更高效地管理和改进代码库,从而成为更好的软件设计师。

    代码阅读方法与实践中文版

    面对规模较大的代码库时,能够快速有效地理解和解析代码,可以帮助我们找出潜在的错误、优化性能、扩展功能,甚至重构代码。尤其在接手他人遗留的项目或加入新的团队时,良好的代码阅读能力能让我们更快地融入开发...

    代码阅读方法与实践(中文版,Diomidis.Spinellis.著)

    《代码阅读方法与实践》是由Diomidis Spinellis编著的一本专为提升程序员代码阅读能力和技巧的书籍。在编程领域,理解并能够高效地阅读他人的代码是至关重要的,因为这不仅能帮助我们学习新的技术和设计模式,还能在...

    读《修改代码的艺术》有感

    这篇博客文章可能是作者在阅读这本书后,结合自己的理解和实践,分享了一些关于如何有效工作于遗留代码的心得体会。 首先,"源码"这个标签暗示了文章会涉及代码级别的修改和优化。在遗留代码中工作时,理解现有代码...

    关于那些阅读源代码技巧

    首先,阅读源代码的目的可以多种多样,包括纯粹为了学习、添加新功能、重构代码以及修复Bug。不同的目的决定了阅读源码的不同心态和方法。比如,如果是为了学习而去阅读源码,往往可以保持较为放松和愉快的心情,而...

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

    在"WEB标准心得之网页重构的思路"中,作者分享了自己的重构方法,主要基于REST、Grid和DRY(Don't Repeat Yourself)原则。以下是对这些知识点的详细说明: 1. **CSS文件组织**:遵循REST(Representational State ...

    重构与模式pdf

    2. **阅读经典书籍**:像《重构与模式pdf》这样的书籍提供了丰富的实例和深入的解析,是学习设计模式的绝佳资源。 3. **参与社区讨论**:加入相关的技术论坛或社区,与其他开发者交流心得,共同探讨设计模式的应用...

    DSP基本实验心得体会

    ### DSP基本实验心得体会 #### 实验背景与目的 在数字信号处理(DSP)的学习过程中,进行内插实验是一项重要的实践活动,旨在帮助学生理解和掌握信号重建的基本原理和技术。内插技术通常用于提高信号的质量或者...

    pycharm2020安装心得.pdf

    PyCharm是由JetBrains公司开发的一款专业Python集成开发环境(IDE),具有代码自动完成、代码重构、代码分析、图形界面开发等强大功能。 描述中提到文档包括了PyCharm专业版和社区版的安装教程,说明文档会针对两种...

    TDD之Swing一个另类的计算器实现心得

    7. **代码重构**:随着测试的通过,作者可能对代码进行了优化和重构以提高可读性和维护性。 在标签中提到的"源码",意味着博主可能分享了项目的源代码,这对于学习者来说是一份宝贵的资源,可以通过阅读和分析代码...

    自动生成代码

    通过阅读这篇博客,我们可能能了解到更多关于选择合适的代码生成工具、如何设置模板、以及如何将自动生成代码融入开发流程的实际案例和建议。同时,了解这些知识点可以帮助开发者提升工作效率,降低出错率,从而更好...

    用IDA反汇编DLL文件心得

    IDA提供了工具来定义和重构这些类型,以便更好地理解代码逻辑。 8. **符号表与导出函数**:DLL文件通常包含导出函数,这些函数可供其他程序调用。IDA会显示这些导出函数及其参数,帮助我们了解DLL的接口。 9. **...

    java的一些学习心得

    29. 代码重构:适时进行代码重构,提高代码质量,保持代码的可维护性。 30. 安全性:关注Java安全,学习如何防止SQL注入、XSS攻击等,保障系统安全。 以上就是我在学习Java过程中积累的一些心得和体会,Java的学习...

    个人工作心得体会.zip

    作者可能分享了关于代码审查、单元测试、重构和遵循最佳实践的心得。 5. **团队协作与沟通**:在IT项目中,团队合作至关重要。作者可能介绍了如何建立有效的沟通机制,解决团队冲突,以及如何通过协作提升团队效率...

    代码开发工具2021.2.2

    它集成了多种语言的语法高亮、自动完成、代码重构等功能,支持包括Java、Python、JavaScript、PHP、C++等多种主流编程语言。这使得开发者无需在不同工具之间切换,即可完成从编写到测试的全过程。 在具体功能上,...

    2022年java实习心得通用13篇.docx

    这涉及到算法选择、代码重构等方面的知识。 总结起来,学习Java不仅需要理论知识,更需要大量实践。面对困难和挑战,保持积极的态度,不断试错并从错误中学习,是成为一名合格Java开发者的关键步骤。通过实习,学生...

    java学习心得

    - **可扩展性**:对未来的功能需求保持响应能力,便于添加新功能而无需大规模重构。 - **可修改性**:易于进行小规模修改,减少错误引入的可能性。 - **灵活性**:不拘泥于固定的结构,能够适应变化的需求。 - **可...

Global site tag (gtag.js) - Google Analytics