重构读书笔记-6_6-Remove Assignments to Parameters+Replace Method With Method Object

重构第六章

7.Remove Assignments to Parameters(去除对参数的赋值)

以一个临时变量取代该参数的位置

你的代码对一个参数进行赋值作用

Example:

int disCount(int inputVal, int quantity, int yearToDate){
    if(inputVal>50) inputVal -=2;
    return inputVal;
}

Analyse:

在函数中去除对参数的修改、赋值,因为这样使得程序是否修改到参数本体位置让人搞不清楚(即传值、传址导致不同的问题)。
所以尽量减少函数对参数的修改,这可以养成一个习惯,有关通过返回值赋值的,定义一个res变量,返回需要的值。如果需要有多个返回值,我以为还是使用传址、引用来进行操作

End:

int disCount(int inputVal, int quantity, int yearToDate){
    int res = inputVal;
    if(inputVal>50) res -=2;
    return res;
}

8.Replace Method With Method Object(函数对象取代函数)

将这个函数放在单独对象中,如此一来局部变量就就变成了对象内的值域,然后你可以在同一个对象中将这个大型函数分解成为数个小型函数

你有一个大型函数,由于其中临时变量泛滥导致你无法使用Extract Method

Example:

class Order...
double price() {
    double primaryBasePrice;
    double secondaryBasePrice;
    double tertiaryBasePrice;
    ...
}

Analyse:

使用Replace Method With Method Object(函数对象取代函数)可以使得Eetract Method(提炼函数)的进行无比的顺畅,因为你将临时变量消除掉,使之作用域获得了一定的扩大,使得同类的方法可以不通过传值就获得变量的值,完成必要的运算。
不过,如果过度使用这个方法,会不会使得程序在一定程度上变得臃肿,出现过度的委托,使得程序结构不再清晰,所以使用也要因情况而定

Example:

class Order...
double price() {
    double primaryBasePrice;
    double secondaryBasePrice;
    double tertiaryBasePrice;
    ...
}

End:

定义一个相当于数据类的BasePrice存在

class BasePrice{
    public: 
        BasePrice(double primaryBasePrice, double secondaryBasePrice, double tertiaryBasePrice)
            :m_primaryBasePrice(primaryBasePrice),
             m_secondaryBasePrice(secondaryBasePrice),
             m_tertiaryBasePrice(tertiaryBasePrice) {
        }
        double GetPrice(){
            //primaryBasePrice、secondaryBasePrice、tertiaryBasePrice的计算
        }
    private:
        double m_primaryBasePrice;
        double m_secondaryBasePrice;
        double m_tertiaryBasePrice;
}

class Order...
double price() {
    return new BasePrice(primaryBasePrice,secondaryBasePrice,tertiaryBasePrice)->GetPrice();
}

Conclusion:

Replace Method With Method Object(函数对象取代函数)可以使得程序使用其他重构手法变得更加的简单,不过也是因为如此,这种方法对程序的影响要更大一些,使用过多,容易使得程序更加的冗杂,适得其反。
所以,要看清实际情况,使用Replace Method With Method Object(函数对象取代函数),同时在重构之后,不能放松,需要使用其他的方法辅助,使得程序结构清晰,减少委托,使得重构达到预期目的

注意

重构必须在有单元测试的情况下,保证之前的功能修改后不收影响。切记!!!

你可能感兴趣的:(重构读书笔记-6_6-Remove Assignments to Parameters+Replace Method With Method Object)