重构第六章
- Inline Method(内联函数)
一个函数,其本体和其名称一样清楚易懂时,在函数调用点插入函数本体,然后移除该函数
Example:
boolean moreThanFiveLateDeliveries() {
return _numberOfLateDeliveries > 5;
}
int getRating() {
return moreThanFiveLateDeliveries() ? 2 : 1;
}
Analyze:
首先,当函数本体和函数的名称一样清楚明了的时候,使用Inline Method方法可以使得程序更加的简介、明了,避免了很多不必要的委托,不必要的间接访问,使得程序可读性更好
其次书中所讲相同,当程序中含有很多的不合理的函数存在的时候,使用Inline Method方法,将这些不合理函数集合到一个大的函数中,然后使用Extract Method等方法,设计更加合理的函数。增加程序的可读性
End:
int getRating() {
return (_numberOfLateDeliveries > 5) ? 2 : 1;
}
简单的小示例:
重构前:
bool IsRmb(Type tp) {
return type == Rmb;
}
double GetRMBRate() {
return RMBRate;
}
double GetDollarRate() {
return DollarRate;
}
bool IsDollar(Type tp) {
return type == Dollar;
double GetMoney(int obj , Type tp) {
if (IsRmb(tp)) {
return GetRMBRate()*obj;
}
if (IsDollar(tp)) {
return GetDollarRate()*obj;
}
}
重构后:
double GetMoney(int obj, Type tp) {
if (type == Rmb) {
return RMBRate*obj;
}
if (type == Dollar) {
return DollarRate*obj;
}
}
Conclusion:
自我感觉
Inline Method可以使得程序的结构更加的紧凑,避免为了解耦而解耦,使得程序在阅读时,能更加清晰的表达程序运行的结果、以及运行的过程
Inline Method方法在使用的时候比较的简单,但单独使用感觉一般,只有在委托层十分多的情况下,有着显著的重构效果。
而且,在使用Inline Method方法的时候,一定要注意将所有的引用点都考虑到,因为业务中分离小函数,很多情况是为了复用,如果有很多的地方都使用了这个函数,那使用该方法时,要注意每个引用点的替换,和衡量工作量。
注意
重构必须在有单元测试的情况下,保证之前的功能修改后不收影响。切记!!!