您的位置:首页 > 其它

读书笔记-重构 - Extract Method(提炼方法)

2013-12-03 23:53 309 查看
目标:

把代码片段整理提炼出来赋予他一个合适的名字

ps:命名的原则是方法名能够表达方法是做什么的,而不是说方法是怎么做的。怎么做的是要放在方法体里面实现的。

简单示例:

修改前

void printOwing(double amount) {  

  printBanner(); 

 
4000
 //print details 

  System.out.println ("name:" + _name);

  System.out.println ("amount" + amount);

}

修改后

void
printOwing(double amount) {    

printBanner();    

printDetails(amount);



void
printDetails (double amount) {    

System.out.println
("name:" + _name);    

System.out.println
("amount" + amount);

}

好处:方法的结构清晰,主方法中只需要看两个方法名就知道这个方法干了什么,怎么干的。

怎么提炼:

1.为你要提炼的代码段取一个合适的名字。如果不能做到这一点的话,说明你对这个代码段提炼考虑还不够成熟。就暂时不要动这段代码。

2.把要提炼的代码段拷贝出来放到新的方法中。

3.查看变量。如果是源方法里面的变量,就考虑把他当做参数传给新的方法中。如果只有这个新方法中能够用到的话,就直接放在子方法中作为临时局部变量使用。

4.需要再仔细学习*ing

5.把结构体的变量传入字方法中,保存修改

6.检查子方法中的局部变量是否还在父方法中声明,如果有的话,就需要给删掉。

7.重构结束。测试。

具体应用场景:

修改前

void printOwing() {

Enumeration e = _orders.elements();

double outstanding = 0.0;

// print banner

System.out.println ("**************************");

System.out.println ("***** Customer Owes ******");

System.out.println ("**************************");

// calculate outstanding

while (e.hasMoreElements()) {

Order each = (Order) e.nextElement();

outstanding += each.getAmount();

}

//print details

System.out.println ("name:" + _name);

System.out.println ("amount" + outstanding);

}

修改后

1.no Local variables

void printOwing() {

Enumeration e = _orders.elements();

double outstanding = 0.0;

printBanner();

// calculate outstanding

while (e.hasMoreElements()) {

Order each = (Order) e.nextElement();

outstanding += each.getAmount();

}

//print details

System.out.println ("name:" + _name);

System.out.println ("amount" + outstanding);

}

void printBanner() {

// print banner

System.out.println ("**************************");

System.out.println ("***** Customer Owes ******");

System.out.println ("**************************");

}

2.use local variables

void printOwing() {

Enumeration e = _orders.elements();

double outstanding = 0.0;

printBanner();

// calculate outstanding

while (e.hasMoreElements()) {

Order each = (Order) e.nextElement();

outstanding += each.getAmount();

}

printDetails(outstanding);

}

void printDetails (double outstanding) {

System.out.println ("name:" + _name);

System.out.println ("amount" + outstanding);

}

3.reassigging a local variables

void printOwing() {

printBanner();

double outstanding = getOutstanding();

printDetails(outstanding);

}

double getOutstanding() {

Enumeration e = _orders.elements();

double outstanding = 0.0;

while (e.hasMoreElements()) {

Order each = (Order) e.nextElement();

outstanding += each.getAmount();

}

return outstanding;

}

4.最理想的修改案,之前的代码碎片都不用管了

void printOwing(double previousAmount) {

printBanner();

double outstanding = getOutstanding(previousAmount * 1.2);

printDetails(outstanding);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  重构 Extract Method