美文网首页
重构读书笔记-10_8-Replace_Parameter_wi

重构读书笔记-10_8-Replace_Parameter_wi

作者: MR_Model | 来源:发表于2019-07-22 09:17 被阅读0次

    重构第十章

    8.Replace Parameter with Methods(以函数取代参数)

    对象调用某个函数,并将所得结果作为参数,传递给另一个函数。而接受该参数的函数也可以调用前一个函数。让参数接受者去除该项参数,并直接调用前一个函数。

    Example:

    public double getPrice() {
        int basePrice = _quantity * _itemPrice;
        int discountLevel;
        if (_quantity > 100) discountLevel = 2;
        else discountLevel = 1;
        double FinalPrice = discountedPrice(basePrice, discountLevel);
        return FinalPrice;
    }
    private double discountedPrice(int basePrice, int discountLevel) {
        if(discountLevel == 2) return basePrice * 0.2;
        else return basePrice * 0.05'
    }
    

    Analyse:
    discountedPrice函数包含有两个参数basePrice和discountLevel为了使的discountedPrice有其他途径获得这两个参数,我将getPrice中的代码提炼成为函数,可以通过discountedPrice函数直接调用。

    private int getBasePrice() {
        return _quantity * _itemPrice;
    }
    
    private int getDiscountLevel() {
        if (_quantity > 100) return 2;
        else return 1;
    }
    public double getPrice() {
        int basePrice = getBasePrice();
        int discountLevel = getDiscountLevel();
        double FinalPrice = discountedPrice(basePrice, discountLevel);
        return FinalPrice;
    }
    

    之后再去除discountedPrice的参数得到:

    private double discountedPrice() {
        if(getDiscountLevel() == 2) return getBasePrice() * 0.2;
        else return getBasePrice() * 0.05;
    }
    
    public double getPrice() {
        return discountedPrice();
    }
    

    End:

    public double getPrice() {
        if(getDiscountLevel() == 2) return getBasePrice() * 0.2;
        else return getBasePrice() * 0.05;
    }
    

    Conclusion:

    过长的参数列表会增加程序阅读者的理解难度,因此我们应该尽可能的缩短参数列的长度。
    Replace Parameter with Methods(以函数取代参数)使得函数可以通过其他的途径获得参数值,从而减少参数的个数。

    注意

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

    相关文章

      网友评论

          本文标题:重构读书笔记-10_8-Replace_Parameter_wi

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