`

谈谈重构

阅读更多
最近阅读Martin Flower的《重构》,对自己有许多启发,以前认为一些正确的观点现在看来也不那么正确了;同时发现对重构的理解只有在阅读了书之后更加彻底;在阅读《重构》之后我对其中几点有点感触:



  1. 在没有具体阅读《重构》之前,我认为重构就是将代码变的容易理解,容易维护,但在阅读了《重构》之后才发现重构不仅可以利用到重新构造已有的代码,也可以帮助我们在阅读代码的过程中增加我们的对代码理解的速度。其实我想每个学习编写代码的同行都在学习的过程中阅读过别人的代码,然后还有可能将别人的代码拿到计算机上编译运行来查看结果表现。实际上我认为这在某种意义上属于重构,只是重构的粒度有多大,或许你修改别人的代码一部分来查看修改的结果,从而帮助自己掌握软件中的更多特性,或者说让自己修改的代码表现出原来的功能。Martin Flower说的就是如此,我们如果没有得到别人完整的文档,那我们怎么样才能理解别人的代码来,好的办法就是我们一边阅读别人的代码,一边部分部分的修改他人的代码,然后测试每次修改的结果与以前的结果是否一样,如果一样,那么你的重构代码是正确,那么你肯定能够理解你自己写的代码吧(自己都不理解自己的代码就不要干了);别人的代码就这样在我们一部分一部分重构当中被我们理解了。



  2. 以前我们写代码的时候喜欢设计,设计的我们认为很详细了,然后开始将所有的功能模块都写完,接着再调试,在调试的过程中我们可能花费比写代码长的多的时间。是的,因为你在运行一个复杂的东西,当然不容易搞定了。Martin Flower认为我们调试的时间可以不用那么长,原因是我们不能在写完了一个复杂系统的时候再调试,我们可以先建立一个好的测试用例,在写这个测试用例的过程中我们更能对整个系统了解,也能够帮助我们写代码;然后我们一点点的写,写一部分测试一下,保证每次新写的代码都能正确运行,从而当代码写完了,系统调试也完毕了。这样的情况下可以认为我们没有在调试上花时间,我们把时间花在测试和编写代码上了。



  3. 以前认为代码当中注释越多越好。Martin Flower又一次给我们教训说,写注释是因为你的代码已经不能告诉代码阅读者他的真实意思了。是的,好的代码可以通过很多方式表达其自身的含义,例如变量的名称,函数的名称等;就如一个比较条件判断来说吧,我们有必要的情况下将这个即使很短的条件抽取一个方法,然后用方法名称来告诉读者判断的真实意义,如果这里直接使用条件判断就要让读者迷惑半天,当然这里的前提是给变量和函数起一个合适的名字,这是考验程序员真功夫的地方了。另外,这里说的不是说写注释不好,如我的目的是如果代码可以描述意义了,注释就不需要写了,这样就让你省了一件事情:保证代码和注释的同步,这不是更好。



  4. 在之前我也认为重构会花费很大代码,因为我们要理解代码,重新编写;但为了修改BUG,Martin Flower告诉我们重构是最快的。也许不相信,我也不相信,但他说的有道理,容易修改的BUG,当然早就被修改了,那么剩下的BUG就很难找了,主要因为代码中的逻辑不清楚,重构可以改变这种情况,让我们的代码有条有理,那么当然BUG就无处藏身了。



  5. 勇于接受变化。以前认为用户频繁的变化需求是不可理喻,实际上是我们自己不可理喻,他们花钱当然需要能提供高质量的服务;而Martin Flower认为不用怕改变,我们有重构工具,重构可以让我们代码任何时候都是清楚的,容易修改的,那么变化是件快乐的事情不再象以前那样艰难了。



  6. 重构与性能不是是对立的。重构让代码容易理解,而性能让代码变的难以理解,不过我们在开始的时候应该考虑怎么样让代码容易理解和维护,这样我们可以在后面适当的时候对代码的某部分进行轻松的性能改进工作。本人做性能改进工作有段时间了,想从庞大的杂乱无章的、不熟悉的代码中找出性能的bottleneck的确不是一件容易的事情,我需要的是理解代码,理解流程,那么如果一个结构很好的代码对于我来说就好对付多了。因此他们不是对立的,性能以重构为基础的。

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

 

分享到:
评论

相关推荐

    谈谈我国谈谈我国劳动关系调整机制的重构的应用.doc

    谈谈我国谈谈我国劳动关系调整机制的重构的应用.doc

    代码设计,重构整理

    接下来,我们谈谈“修改代码的艺术”。在软件开发中,需求变更、bug修复等都需要对已有代码进行修改。这时,我们需要谨慎处理,遵循一定的原则。首先,确保充分理解原有代码的逻辑,再进行修改,以免引入新的错误。...

    大规模软件重用和系统重构课件

    首先,我们来谈谈“大规模软件重用”。软件重用是开发过程中的核心原则之一,它指的是在多个项目或模块中重复使用已有的代码、组件或设计模式。重用可以大大减少工作量,避免重复劳动,同时也能提高代码的稳定性和...

    cocoaheads-sp-contacts:专为2508年的CocoaHeads SP设计的项目,着重于代码质量和总体测试

    首先,我们来谈谈重构。重构是改善代码结构和可读性的一种技术,而不改变其外在行为。在这个项目中,开发者们被鼓励对现有代码进行深入分析,识别出可以优化的部分,如冗余代码、复杂逻辑或不符合SOLID原则的设计。...

    谈谈企业的数字化转型(1).rar

    这份名为“谈谈企业的数字化转型(1).rar”的资料,汇集了关于数字化转型的深刻见解和实用策略,旨在为企业提供一个全面而细致的转型蓝图。资料中详细探讨了数字化转型的核心要素,包括企业文化的转变、业务流程的...

    谈谈怎样提高炼丹手速.pdf

    提高炼丹手速还需要我们积累和习惯,每种经典算法任务都需要积累一个重构的project,这将帮助我们快速完成其他相近的项目。同时,我们也需要抽出时间来重构和完善现有的项目,使其更加易用和灵活。 最后,我们需要...

    谈谈Android Fragments 详细使用

    Fragments 提供了一种灵活的方式来构建动态和可重构的用户界面,特别是在平板电脑和手机等不同屏幕大小的设备上。本文将详细介绍Fragments 的使用、设计理念、生命周期以及分类。 **Fragments 的诞生初衷** ...

    谈谈FPGA的在线调试工具.docx

    根据香农定理(奈奎斯特定理),为了准确地重构数字信号,采样频率必须至少是信号频率的两倍。对于模拟信号,这一要求更高。在实际操作中,示波器通常要求采样频率至少是输入信号的10倍。对于FPGA的在线调试工具,...

    历史学科谈谈对当前中学历史教学改革中几个热点问题的认识.doc

    综上所述,历史教学改革的热点问题涉及到对素养教育本质的理解、教学目标的重构以及教学途径的多元化。解决这些问题,需要教育工作者深入研究,勇于创新,以科学的态度面对改革挑战,确保历史教学在培养全面发展的...

    前端面试题基础篇293题

    包含第一部分html,第二部分CSS,第三部分...第十部分综合问题,如谈谈你对重构的理解、什么样的前端代码是好的、对前端工程师这个职位怎么理解、前端的价值体现在哪,最后整理了一些常常见问题无具体答案内容的。

    SDCC 2016架构峰会(深圳站)PPT合集

    04-官华-唯品会-实施企业架构转型重构的若干治理问题洞察 05 周航-1号店-1号店搜索架构演化实践 06 何锐邦 腾讯-大数据机器学习应用架构实战 07 王津银-优维科技-谈谈技术架构的运维治理 08-高保庆-电信运营商级安全...

    谈谈XCode9的新变化

    重构功能得到显著改进,重命名方法或变量时,XCode9会显示预期影响的动画,使开发者能清楚地看到即将发生的变化,提高重构的准确性和可视化程度。 此外,编辑器的字体大小调整功能加入,CMD+加减号可快速调整,尤其...

    factories:从20150421谈谈测试工厂

    演示文稿中发生的重构都可以作为请求请求找到。 其中有四个: 问题或评论可以作为GitHub问题打开,也可以在。 我将尽力尽快回复您的任何评论。 推荐资源 这些是影响我对测试的想法的一些资源:

    另一个角度谈谈DIV CSS

    看了cragle的《有没有必要将网站Div Css重构?》的文章,有一些想法不说不快,我也在文章的评论里提到曾经开除过两个执着使用div技术的美工,遭到一些朋友的反对,但也有一位技术总监的朋友发帖表示支持,很经典的话...

Global site tag (gtag.js) - Google Analytics