重构笔记

【重构实例】

1.提炼函数(Extract Methods)
将代码段放入函数中,让函数名称解释该函数的用途

String name = request.getParameter("Name");
if(!isNullOrEmpty(name)){
	......
}
String age = request.getParamter("Age");
if(!isNullOrEmpty(name)){
	......
}
private boolean isNullOrEmpty(final String string){
	if(string!=null && string.length()>0){
		return true;
	}else{
		return false;
	}
}


2.将函数内联化(Inline Method)
如果函数的逻辑太简单,则把其移动到调用它的代码中,取消这个函数
int getRating(){
	return (_numberOfLateDeliveries>5) ? 2 : 1;
}


3.将临时变量内联化(Inline Temp)
变量被一个简单的表达式赋值一次,则变量替换成那个表达式
return (anOrder.basePrice()>1000);


4.以查询取代临时变量(Replace Temp with Query)
if(basePrice()>1000)
	return basePrice()*0.95;
else
	return basePrice()*0.98;
...
double basePrice(){
	return _quantity*_itemPrice;
}


5.引入解释性变量(Introduce Explaining Variable)
将复杂表达式结果放入临时变量,用变量名来解释表达式用途
boolean isMacOs = platform.toUpperCase().indexOf("MAC") > -1;
boolean isIEBrower = browser.toUpperCase().indexOf("IE") > -1;
boolean wasResized = resize > 0;
if(isMacOs && isIEBrowser && wasInitialized() && wasResized){
	....
}


6.解剖临时变量(Split Temporary Variable)
一个临时变量多次被赋值(不在循环中),应该针对每次赋值,创造独立的临时变量
double temp = 2(_height+_width);
System.out.println(temp);
temp=_height*_width;
System.out.println(temp);

重构:

double perimeter = 2*(_height+_width);
System.out.println(perimeter);
double area = _height*_width;
Sytem.out.println(area);


7.以卫语句取代嵌套条件语句(Replace Nested Conditional with Guard Clauses)
函数中条件语句使人难以看正常的执行路径,用卫语句替换嵌套条件
double getPayAmount(){
	if(...) return deadAmount();
	if(...) return separatedAmount();
	if(...) return retiredAmount();
	return normalPayAmount();
}


8.分解条件表达式(Decompose Conditional)
从复杂的条件语句分支中分别提炼出单独的函数

if(date.before(SUMMER_START) || date.after(SUMMER_END))
	charge = quantity * _winterRate + _winterServiceCharge;
else
	charge = quantity * _summerRate;
----------------------------------------
if(notSummer(date))
	charge = winterCharge(quantity);
else
	charge = summerCharge(quantity);


【不良代码】
=========================================
1.重复的代码(Duplicated Code)
2.过长的函数(Long Method)
3.过大的类(Large Class)
4.过长的参数列(Long Parameter List)
5.发散式变化(Divergent Change): 一个类由于不同的原因而被修改。将类拆分成多个,每个类只因为一种变化而修改。



你可能感兴趣的:(重构笔记)