前言
上两篇我们讲到了提炼函数(Extract Method)和内联函数(Inline Method)两种重构手法, 接下来我们继续讲解跟重新组织函数相关的重构手法.(www.hedaoshe.com)
内联临时变量(Inline Temp)
这个重构手法和内联函数的意思差不多, 不过融合的对象变成了临时变量. 下面是一个例子:
double basePrice = anOrder.basePrice();
return (basePrice > 1000);
//上面这个basePrice就是一个临时变量,可以替换:
return (anOrder.basePrice() > 1000);
使用场景:
- Inline Temp一般不会单独使用, 多半是作为Replace Temp With Query的一部分使用.
- 如果临时变量妨碍了其他重构手法, 那么应该使用它.
以查询取代临时变量(Replace Temp With Query)
这个手法一般是运用Extract Method时必用的提炼手法, 因为某个函数内的临时变量只能被该函数使用, 类中的其他函数共享不到这个临时变量, 会导致其他函数会在自己内部写同样的逻辑, 代码也越来越长. 下面用一个实例说明:
double basePrice = _quantity * _itemPrice;
if(basePrice > 1000){
return basePrice * 0.95;
}else{
return basePrice * 0.98;
}
//我们可以看出basePrice只能被当前函数使用, 该类中的其他函数还要写同样逻辑
//于是我们把表达式提炼成一个单独函数, 供该类所有函数共享
double basePrice(){
return _quantity * _itemPrice;
}
if(basePrice() > 1000){
return basePrice() * 0.95;
}else{
return basePrice() * 0.98;
}
总结
今天我们介绍了两个关于函数的重构方法:Inline Temp和Replace Temp With Query. Inline Temp比较简单, 一般是和Replace Temp With Query一起用. 而Replace Temp With Query这个手法一般在Extract Method时会大量使用, 也是我们要重点掌握的.