代码重构

作者: 树木有朋 | 来源:发表于2020-01-06 12:54 被阅读0次

早起第九天-代码重构

图/unsplash @paysonwick

其实我是个程序员,今天想说一说重构。

其实我是个程序员,今天想说一说重构。

看过几本关于重构的书籍,例如《重构,改善既有代码的设计》,《重构与模式》以及最近在看的设计模式等,虽然每次都是浅尝则止,但也学到了点东西,加上工作中偶尔也会进行一些重构,所以有一点心得体会。

什么是重构

Martin Fowler 是这样定义重构的:"重构是一种对软件内部结构的改善,目的是在不改变软件的可见行为的情况下,使其更易理解,修改成本更低。"

简单来说,就是在不改变最终逻辑行为的前提下,将代码改写得让人更容易理解和灵活。

为什么要重构

有很多原因,比如说项目之初,时间上来不及,设计上没有考虑扩展性,以至于之后每次新增功能都要改动到已有代码,造成很高的风险。或者不同人一起维护的代码,各自有各自的开发习惯,即便是同一个人写的,时间久了也会显得杂乱无章,维护已有代码的成本可能已经比新开发一套代码的成本还要高了。

你可以说,当项目快进行不下去了,这时候可能就需要重构。

如何重构

首先要找出代码的坏味道和设计上的不足之处,这并不容易,往往需要对业务和技术有深入的理解,才能确定哪些东西应该归于哪里,以及未来的需求可能出现的变化,这样才能在重构的时候兼具未来,设计出高内聚低耦合扩展性良好的代码。

PS: 这里很幸运我的领导是某一领域的领域专家。

除非项目走不下去了,否则我们一般不会专门抽出时间来重构,因为这个投入产出比效果还不看上去并不明显。所以我们当前的重构往往是小步快跑。

我把它分为四个阶段

编码前的分析设计阶段

多参与项目的需求分析,可行性分析,多一点业务理解。在详细设计阶段,一定要把自己的设计方案用时序图或者 ER 图画出来,然后叫上同事们一起来 review 你的设计方案。

我觉得这一步特别重要,一个人对业务和技术的理解往往有限,叫上同事一起 review 设计能发现很多问题。

开始编码阶段

因为设计方案已经review过了,所以这个时候不怎么会出大问题了,注意命名规范,方法的可测试性,以及上帝的归上帝,凯撒的归凯撒的,就是该是谁的东西就放在谁那,做到高内聚低耦合,不过好些时候会当局者迷,写了不规范的也不自知。

代码 review 阶段

推荐 git rebase 配合 source tree 一起使用。如下图,即使多人写作,那么提交记录也是清晰的一条直线,点击可查看每次改动的详情,非常适合当下就 review 。

这样在团队合作时,可以清晰得看到同事每一次的提交,有空就可以看看同事提交的代码。另外最好每次小步快跑,每次提交只实现一个需求或者修改一个 bug ,好处多多,不要等到一大堆代码几十个文件 change 的时候,喊同事进小黑屋 review 代码,那样效率太低,往往只是走个形式,没啥大作用。

后期维护阶段

因为项目都是不断迭代的,在每次改动涉及到原有需求的时候,可以顺便看一看有没有哪里是当初设计不合理的,可以一点一点优化,有时候可能只是把某个方法移到其他类中,有时候可能只是改个名字,然后测试没问题就可以发布了。这都是小小的重构,如果涉及到设计方案的重构,就需要花大量时间来调整,这个风险太高,得有充分的时间和测试才行。

总之,重构的过程其实很有趣,有时候会让人有成就感,当然如果大重构也会有很高的风险,对于业务和技术的能力都是一个挑战。我们更应该尽量做好每一个小功能,设计好小方法,如果以分治思想来看,每一个小的做好了,那么大的也就好了。虽然不尽如此,但也大同小异。

相关文章

  • 代码重构专题(转载)

    代码重构(一):函数重构规则代码重构(二):类重构规则代码重构(三):数据重构规则代码重构(四):条件表达式重构规...

  • 《重构》一书总结(二)

    《重构》一书总结(二) 重构的重点,在于对那些代码进行重构,如果重构不当,反而适得其反。 重构代码终结如下 1.D...

  • Mvc分页组件MvcSimplePager代码重构

    Mvc分页组件MvcSimplePager代码重构 Mvc分页组件MvcSimplePager代码重构1.1 In...

  • 编程的方法——重构、测试等

    重构 为什么要重构? 重构代码是保持代码质量的一个极其有效的手段,它可以避免你的代码腐化到无可救药的地步。 重构可...

  • 代码重构利器

    使用重构件(Codemod)加速 JavaScript 开发和重构代码重构利器 —— jscodeshift 对于...

  • 为什么要代码重构?如何重构?常见重构技巧

    关于重构 为什么要重构 代码重构漫画 项目在不断演进过程中,代码不停地在堆砌。如果没有人为代码的质量负责,代码总是...

  • 重构

    重构时,先梳理代码,删除无用的逻辑,进行小的消除重复代码重构,封装小方法重构,等等,目的是让大段大段代码之前的耦合...

  • 重构代码之美

    什么是重构; 为什么要重构; 什么时候重构; 怎样避免重构的现象; 重构的难点在哪里; 如何来实施代码重构; 重构...

  • (14)打鸡儿教你Vue.js

    重构“代码重构” 为什么要进行重构提高代码的可读性和可维护性 代码中存在着重复的代码 存在过大的类或过长的方法 强...

  • 代码重构

    重构前: import jsondef greet_user(): """问候用户,并指出其名字""" filen...

网友评论

    本文标题:代码重构

    本文链接:https://www.haomeiwen.com/subject/wzxkactx.html