<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    ivaneeo's blog

    自由的力量,自由的生活。

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks
    運用Extract Method處理上述范例
    面對上代碼,我通常不會以臨時變量來解釋其動作意圖,我更喜歡使用Extract Method(110).讓我們回到起點:
    double price() {
       //price is base price - quantity discount + shipping
       return _quantity * _itemPrice -
          Math.max(0, _quantity - 500) * _itemPrice * 0.05 +
          Math.min(_quantity * _itemPrice * 0.1, 100.0);
    }

    這次我把底價計算提煉到一個獨立函數中:
    double price() {
       //price is base price - quantity discount + shipping
       return basePrice() -
          Math.max(0, _quantity - 500) * _itemPrice * 0.05 +
          Math.min(basePrice() * 0.1, 100.0);
    }
    private double basePrice() {
       return _quantity * _itemPrice;
    }

    我繼續我的提煉,每次提煉出一個新函數.最后得到下列代碼:
    double price() {
       //price is base price - quantity discount + shipping
       return basePrice() - quantityDiscount() + shipping();      
    }
    private double quantityDiscount() {
       Math.max(0, _quantity - 500) * _itemPrice * 0.05;
    }
    private double shipping() {
       Math.min(basePrice() * 0.1, 100.0);
    }
    private double basePrice() {
       return _quantity * _itemPrice;
    }


    我比較喜歡使用Extract Method(110),因為同一對象中的任何部分,都可以根據自己的需要去取用這些提煉出來的函數.一開始我會這些新函數聲明為private;如果其他對象也需要它們,我可以輕易釋放這些函數的訪問限制.我還發現,Extract Method(110)的工作量通常并不必Introduce Explaining Variable(124)來得大.

    那么,應該在什么時候使用Introduce Explaining Variable(124)呢?答案是:在Extract Method(110)需要花費更大工作量時.如果我要處理的是一個擁有大量局部變量的算法,那么使用Extract Method(110)絕非易事.這種情況下我會使用Introduce Explaining Variable(124)幫助我清理代碼,然后再考慮下一步該怎么辦.搞清楚代碼邏輯之后,我總是可以運用Replace Temp with Query(120)把被我引入的那些解釋性臨時變量去掉.況且,如果我最終使用Replace Method with Method Object(135),那么被我引入的那些解釋性臨時變量也有其價值.
    posted on 2005-08-25 17:07 ivaneeo 閱讀(185) 評論(0)  編輯  收藏 所屬分類: refactoring-從地獄中重生
    主站蜘蛛池模板: 国产精品久久免费视频| 成年大片免费高清在线看黄| 在线jyzzjyzz免费视频| 国产在线观看片a免费观看| 亚洲国产精品日韩av不卡在线| 亚洲天堂2017无码中文| 亚洲中文字幕无码一去台湾| 亚洲jjzzjjzz在线观看| 亚洲日韩精品无码AV海量| 亚洲综合一区无码精品| 亚洲精品国产精品国自产网站| 国产成人精品日本亚洲直接| 亚洲一区二区三区写真 | 亚洲精品9999久久久久无码| 99999久久久久久亚洲| 亚洲国产精品嫩草影院久久 | 国产精品视频免费一区二区| 最近2019中文免费字幕| 国产高清在线免费视频| 亚洲美日韩Av中文字幕无码久久久妻妇| 亚洲欧洲精品成人久久曰影片 | 日韩免费一区二区三区在线| 免费中文熟妇在线影片| 男女拍拍拍免费视频网站| 亚洲AV无码乱码在线观看代蜜桃| 亚洲AV成人影视在线观看| 香蕉视频亚洲一级| 中文字幕手机在线免费看电影| 国产精成人品日日拍夜夜免费| 99视频免费观看| 成人免费一区二区无码视频| 亚洲A∨午夜成人片精品网站 | 成人人观看的免费毛片| 免费v片在线观看| 国产亚洲精AA在线观看SEE| 国产一级做a爱免费视频| 亚洲一区二区高清| 成人免费视频试看120秒| 亚洲黄片毛片在线观看| 亚洲欧洲日产国产综合网| 精品亚洲AV无码一区二区|