代码重构有什么意义?为什么重构有用?

武培轩 2020年02月06日 83次浏览

所谓重构就是在不改变代码外在行为的前提下,对代码进行修改,以改进程序的内部结构。本质上说,重构就是在代码写好之后改进它的设计。

前几个月完成了一个模块的功能重构,之前代码中的“坏味道”很多,例如:重复代码、过长函数和过大的类、魔法数以及各种if-else判断,阅读性极差并且代码效率也不高,因此通过提炼函数、类,用字面常量取代魔法数,用多态取代条件表达式等,采用多线程充分利用CPU资源等方式进行重构,虽然重构绝对不是所谓的“银弹”,不过的确有价值,可以帮助你始终良好地控制代码。

今天来说一下为什么重构有用呢?程序有两种价值:"今天可以为你做什么"和"明天可以为你做什么"。大多数时候,我们都只关注自己今天想要程序做什么。不论是修复 Bug 或是添加特性,我们都是为了让程序更加完善更强大,让它在今天更有价值。

但是系统当下行为,只是整个故事的一部分,如果没有认清这一点,无法长期从事编程工作。如果你为求完成今天任务而不择手段,导致不可能在明天完成明天的任务,那么最终还是会失败。但是,你知道自己今天需要什么,却不一定知道自己明天需要什么。也许你可以猜到明天的需求,也许吧,但肯定还有些事情出乎你的意料。

对于今天的工作,我了解得很充分:对于明天的工作,我了解得不够充分。但如果我纯粹只是为今天工作,明天我将完全无法工作。

重构是一条摆脱束缚的道路。如果你发现昨天的决定已经不适合今天的情况,放心改变这个决定就是,然后你就可以完成今天的工作了。明天回头看今天的理解也许觉得幼稚,那时你还可以改变你的理解。

是什么让程序如此难以修改?主要有以下四个原因:

  • 难以阅读的程序;
  • 逻辑复杂的程序;
  • 添加新行为时需要修改既有代码者;
  • 带复杂条件逻辑的程序。

因此,我们希望编写的程序是:

  1. 容易理解;
  2. 所有逻辑都只在唯一地点指定;
  3. 新的改动不会危及现有行为;
  4. 尽可能简单表达条件逻辑。

重构是这样一个过程:它在一个目前可运行的程序上进行,企图在不改变程序行为的情况下赋予上述美好性质,使我们能够继续保持高速开发,从而增加程序的价值。