关于重构的重要目标之一,即是让代码更容易让人阅读和理解。其实,代码的好与坏在必定程度上是如出一辙的,至少对计算机而言,能正常工做的代码都不算太坏。可是,代码也必须能让其余人看懂码农的思想世界,这才是重构存在的意义了。可是,重构的时机把握远比理解重构的意义重要的多。下面简单说明下,重构的时机问题。编程
1、重复代码结构或语句块,尽可能抽取成独立的模块,类或函数都可;模块化
2、过长的函数,尽可能将函数缩小,减少中间变量,局部变量、参数等变量;须要特别注释的代码尽可能函数模块化,积极分解函数,并尽可能为函数取一个顾名思义的好名称也很重要;条件表达式和循环部分也能够提炼成函数;函数
3、过大的类,函数功能过于复杂,不便于理解和使用;变量多,代码多,逻辑复杂;测试
4、参数列表过长,参数容易被遗漏;对象
5、发散式变化的代码,若是需求改变,须要修改多类代码,每每须要将代码的改变集中在一处或类中,主要是一个类受多种变化的影响;继承
6、代码的一处改变,须要修改多个类中的代码,主要是一种变化引起多个类相应修改;it
7、对象技术的要点是:将数据和对数据的操做包装在一块儿的编程技术,若是一个类中的方法使用其余类中的数据比使用所在类中的数据更多,说明方法须要移动到相应的类中更加合理,这就是依恋情结;变量
8、数据泥团:数据项也喜欢扎墩儿,若是许多类中出现相同的数据项,能够考虑雷同的数据项提炼成一个类处理;重构
9、基本类型偏执:编程环境中,通常都有基本类型和符合类型,若是符合类型数据用的地方够多,最好提炼成类使用更方便;循环
10、switch现身的地方:凡是出现switch的地方,基本会出现较多判断的场合,能够将其提炼成函数;
11、平行继承体系:当为一个类增长一个子类时,必须为另外一个类增长子类时,须要重构了;
12、冗余类:若是一个类的投入比产值还多,就须要被K掉了;
十3、过多的规划代码:预备的处理方式或变量历来没有用过,删除;抽象类使用不足,能够变成具体类;类的做用只是用来测试,删除;
十4、使人眼花缭乱的字段:只为特定做用的变量;使用状况很少的多个字段,能够将其提炼成一个类;
十5、耦合过分的调用链:若是一个调用A时调用B,B调用C,C调用D,D调用E,最后使用E提供的数据,存在耦合过分;
十6、委托过分:一个封装好的类中若是大部分函数都和外面代码有关联就是委托过分;
十7、狎昵关系:若是类中的私有成员常被其余类惦记,说明须要重构了;
十8、殊途同归:若是两个函数签名不同,作着一样的事情,须要重构;
十9、类库的不完美:面向对象的最终目标是代码复用,而类库是最直接的展示形式,若是只是须要添加类库的个别功能,能够自行处理,不然须要重构类库;
二10、纯粹的数据类:只包含有基本的数据和对数据的基本访问的类,这些类应尽可能隐藏;
二11、应用拒绝:子类在继承父类的数据成员和函数成员时,不须要全部的成员时,须要改进继承的套路;
二12、过多的注释:若是代码须要大段的代码注释,每每不如直接用简单的代码实现效果更好;
编程终极法则:事不过三,三则重构。是说第一次作某件事时尽管放心去作;第二次作某件相似的事时,会产生好感,不管如何还能够去作;第三次再重作某件相似的事时,就应该重构。重构的时机,严格来讲,重构应该是随时随地的才行,非要说具体的时机:添加功能时重构;修补错误时重构;复审代码时重构;就足够了。