读书笔记-重构 - 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);
}
把代码片段整理提炼出来赋予他一个合适的名字
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);
}
相关文章推荐
- 步步为营 .NET 代码重构学习笔记 二、提炼方法(Extract Method)
- 步步为营 .NET 代码重构学习笔记 二、提炼方法(Extract Method)
- 步步为营 .NET 代码重构学习笔记 二、提炼方法(Extract Method)
- 重构1:Extract Method提炼函数
- 重构--Extract Method(提炼函数)(四)
- JAVA-----myeclipse快捷操作:一段代码自动生成方法 refactor重构extract method抽取方法
- 重构之提炼方法
- refactoring笔记——代码重构的方法:Extract Method
- 重构--Extract Method(提炼函数)(四)
- 方法一:Extract Method(提炼函数)
- JAVA-----myeclipse快捷操作:一段代码自动生成方法 refactor重构extract method抽取方法
- 重构--Extract Method(提炼函数)(四)
- 重构--Extract Method(提炼函数)(四)
- 重构:Extract Method (提炼函数)
- 重构--Extract Method(提炼函数)(四)
- 《重构 改善既有代码的设计》学习笔记 2 -- Extract Method(提炼函数)
- 读书笔记-重构-Replace Method with Method Object(用对象代替方法)
- 重构--Extract Method(提炼函数)(四)
- 提炼方法 Extract Method
- 重构--Extract Method(提炼函数)(四)