重构读书笔记-Extract_Method

重构第六章

  1. Extra Method(提炼函数)

当看到一个过长函数或者需要注释才能看懂的函数的时候,将代码放进一个独立函数中
动机(优点):
1.每个函数的粒度都很小
2.函数之间的复用机会更大
3.函数的重写(override)更容易些

Example:

void printOwing(){
    Enameration e = _order.elemets();
    double outstanding =0.0;
    //print banner;
    System.out.printIn(){"*****************"};
    System.out.printIn(){"***Customer******"};
    System.out.printIn(){"*****************"};

    //calculate outstanding
    while(e.hasMoreElements()) {
        Order each =(Order) e.nextElement();
        outstanding += each.getAmount();
    }
    //print details
    System.out.printIn("name:",_name);
    System.out.printIn("amount": outstanding);
}

Analyse:

示例中函数 printOwing()完成了诸如: print banner、calculate outstanding、print details的功能。
维护者必须阅读完整的函数,才能够知晓这个函数的具体含义。此时我们就需要Extract Method(提炼函数),使得函数的功能唯一,同时使得函数更加的精炼,提升可读性,可维护性。

首先:将3个功能提炼出来

printBanner:实现打印Banner的作用
void printBanner(){
    System.out.printIn(){"*****************"};
    System.out.printIn(){"*****Customer****"};
    System.out.printIn(){"*****************"};
}

printDetails:实现打印细节的作用
void printDetails(){
    System.out.printIn("name:",_name);
    System.out.printIn("amount": outstanding);
}

getOutstanding:实现支出的计算功能
double getOutstanding() {
    Enameration e = _order.elemets();
    double res =0.0;
    while(e.hasMoreElements()){
        Order each =(Order) e.nextElement();
        outstanding += each.getAmount();
    }
    return res;
}

其次:将之前函数的功能处,替换为新的函数调用

void printOwing() {
    printBanner();
    double outstanding = getOutstanding();
    printDetails(outstanding);
}

Conclusion:

Extract Method(提炼函数)功能可以实现一个过长函数的提炼,是的程序拥有更好的可读性。
不过不能过度的使用Extract Method(提炼函数),使得程序太过冗杂,程序粒度太碎;
同时,Extract Method要求编程人员对变量的命名拥有一定的功力,使得函数的名称和具体的功能有一个清晰的映射关系,可以强化代码的清晰度

注意

重构必须在有单元测试的情况下,保证之前的功能修改后不收影响。切记!!!

你可能感兴趣的:(重构读书笔记-Extract_Method)