美文网首页
重构读书笔记-6_6-Remove Assignments to

重构读书笔记-6_6-Remove Assignments to

作者: MR_Model | 来源:发表于2019-06-12 09:26 被阅读0次

    重构第六章

    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

          本文链接:https://www.haomeiwen.com/subject/kbfkfctx.html