经常听别人提重构,最近自己也做了重构的项目,谈谈重构的感受。
代码重构
大家在公司写代码,最后合并在一起,风格迥异,水平也参差不齐。如果一家公司没有code review,对代码的整洁度要求不高,就会看到各种高水平的代码和重复但是勉强生效的代码大杂烩的场景。
这个时候,大家就会想重构,按照一个统一的标准,去改造现有的代码,就好像把一台轮椅和一台汽车,可能还有飞机一起丢进熔炉再造出几台统一、稳定的汽车或者飞机。
首先接手别人的代码,由于是初始代码,当时的人觉得能用就好了,赶工的代码,所以一个页面没有组件化,3000多行逻辑代码,每次看到这个文件,我都会远远躲开,有一种恐惧心理。
后来实在躲不开,根据需求去看了几次,发现并没有非常复杂的逻辑,只是太多重复代码,没有抽到一个地方去调用,因为是别人写的代码,要彻底去重构还要先弄明白人家为什么要这样写。
1. 减少不必要的重复
我第一步做的重构,就是把多处重复的地方抽出来,封装成一个方法,这个方法可以是一个公共方法,也可以只在这个文件里去调用的方法,按照实际的需要。
2. 重构方法
这个跟程序设计有关系,你可能有N条不同的道路走到重点,那么你能用的可以安全到达,避开所有坑的路就是N的子集,在这个子集里,你可以去寻找那条最短,最快的路,替换原先绕路的路线,就是一种对函数执行的流程,函数方法的重构。
3. 组件化
这就像手拿一把手术刀,切割代码成一个一个独立的组件,再相互包扎好。
本来在一个页面,就在一个作用域里,值的调用不是问题,相互变成单独的组件之后,就要用到组件间传值。
每设计一个组件,都要想明白,组件的功能是独立且单一的,可能有好几种方式去达到最终的目的。
只要能找到一种,让各自独立,便于修改维护的设计就是好的。