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

目标:

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

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


简单示例:

修改前

void printOwing(double amount) {  

  printBanner(); 

  //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
个人分类: java 读书笔记
上一篇重构读书笔记
下一篇读书笔记-重构 - Remove Assignments to Parameters(删除对参数的复制)
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭