重構讀書筆記-Extract_Method

重構第六章

  1. Extra Method(提煉函數(shù))

當看到一個過長函數(shù)或者需要注釋才能看懂的函數(shù)的時候,將代碼放進一個獨立函數(shù)中
動機(優(yōu)點):
1.每個函數(shù)的粒度都很小
2.函數(shù)之間的復用機會更大
3.函數(shù)的重寫(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:

示例中函數(shù) printOwing()完成了諸如: print banner、calculate outstanding、print details的功能。
維護者必須閱讀完整的函數(shù),才能夠知曉這個函數(shù)的具體含義。此時我們就需要Extract Method(提煉函數(shù)),使得函數(shù)的功能唯一,同時使得函數(shù)更加的精煉,提升可讀性,可維護性。

首先:將3個功能提煉出來

printBanner:實現(xiàn)打印Banner的作用
void printBanner(){
    System.out.printIn(){"*****************"};
    System.out.printIn(){"*****Customer****"};
    System.out.printIn(){"*****************"};
}

printDetails:實現(xiàn)打印細節(jié)的作用
void printDetails(){
    System.out.printIn("name:",_name);
    System.out.printIn("amount": outstanding);
}

getOutstanding:實現(xiàn)支出的計算功能
double getOutstanding() {
    Enameration e = _order.elemets();
    double res =0.0;
    while(e.hasMoreElements()){
        Order each =(Order) e.nextElement();
        outstanding += each.getAmount();
    }
    return res;
}

其次:將之前函數(shù)的功能處,替換為新的函數(shù)調用

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

Conclusion:

Extract Method(提煉函數(shù))功能可以實現(xiàn)一個過長函數(shù)的提煉,是的程序擁有更好的可讀性。
不過不能過度的使用Extract Method(提煉函數(shù)),使得程序太過冗雜,程序粒度太碎;
同時,Extract Method要求編程人員對變量的命名擁有一定的功力,使得函數(shù)的名稱和具體的功能有一個清晰的映射關系,可以強化代碼的清晰度

注意

重構必須在有單元測試的情況下,保證之前的功能修改后不收影響。切記!?。?/code>
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容