美文网首页
重构读书笔记-Extract_Method

重构读书笔记-Extract_Method

作者: MR_Model | 来源:发表于2019-06-04 19:53 被阅读0次

    重构第六章

    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

          本文链接:https://www.haomeiwen.com/subject/prgrxctx.html