重构--有效设计代码

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/pzq915981048/article/details/90482702

最近在读《重构-改善既有代码的设计》,对其简单进行了一下总结,但是对于里面大多数内容,认为都是无关紧要的。

姑且先简单写一下,如果后续有比较好的重构理念,再进行补充

重构:对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。

原因:

当人们只为短期目的,或是在完全理解整体设计之前,就贸然修改代码,程序将逐渐失去自己的结构,程序员越来越难通过阅读源码而理解原来的设计。

1、代码经过很多人的手,时间变长,每个人的风格不同,是代码变得杂乱

2、写代码时为了短期目的,只为满足功能,没有考虑扩展性与可理解性

三次法则:事不过三,三则重构

第一次做某件事时只管去做;第二次做类似的事会产生反感,但无论如何还是可以去做;第三次再做类似的事,你就应该重构。

添加功能时重构;复审代码时重构;修补错误时重构。

代码的坏味道:

重复代码、过长函数、过大的类、过长的参数列、发散式变化、数据泥团、switch、过多的注释

提炼函数:针对过长的函数

可以将部门独立的功能抽取出来,作为单独的函数来调用。同时函数名要能代表抽取这部分代码的功能,使人容易理解。

同时要注意是否引用局部变量,处理好局部变量与抽取新函数之间的调用关系。

拆分时注意不要粒度过于细,否则会造成函数功能过于简单,同时数量太多,反而不利于维护
 

void printinfo(){

        printBanner();

        System.out.println("print test");

        System.out.println("print info");

    }
void printinfo(){

        printBanner();

        printInfo();

    }

    void printInfo(){

        System.out.println("print test");

        System.out.println("print info");

    }

  

2、引入解释性变量

表达式有可能非常复杂而难以阅读,这种情况下,临时变量可以帮助你将表达式分解为比较容易管理的形式

boolean volumeAndCommissionRate = (volume==0) && (commissionRate >=50) && userType.equals("0") &&

                        (null == dsr || dsr==50000 || dsr==0);

                

boolean volumeAndPrice = (volume==0) && (zkFinalPrice==0.1 || zkFinalPrice==0.01) && userType.equals("0");

               

boolean priceAndDsr = first && ( dsr==0 || null == dsr || dsr==50000 ) && (zkFinalPrice<=1) && userType.equals("0");

                

if(priceAndCommissionRate || volumeAndCommissionRate || volumeAndPrice || priceAndDsr){

     System.out.println("test info");

}
if((volume==0) && (commissionRate >=50) && userType.equals("0") &&

                        (null == dsr || dsr==50000 || dsr==0) || (volume==0) && (zkFinalPrice==0.1 || zkFinalPrice==0.01) && userType.equals("0") || first && ( dsr==0 || null == dsr || dsr==50000 ) && (zkFinalPrice<=1) && userType.equals("0")){

    System.out.println("test info");

}

3、移除对参数的赋值

当函数对传入的基本类型的参数,进行操作时,可能会造成语义不清,所以建议如果对变量进行修改,建议赋值给一个新的变量,然后进行操作,这样就能体现函数所带来的变化。

int count(int v1,int v2){

    return v1*89+100

}
int count(int v1,int v2){

    int temp = v1*89+100;

    return temp;

}

猜你喜欢

转载自blog.csdn.net/pzq915981048/article/details/90482702
今日推荐