<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-從地獄中重生
    主站蜘蛛池模板: 亚洲国产日韩女人aaaaaa毛片在线| 国产白丝无码免费视频| 亚洲电影在线播放| 亚洲一区二区女搞男| 国产精品无码一区二区三区免费 | 91精品全国免费观看含羞草| 在线视频亚洲一区| 亚洲综合色婷婷在线观看| 亚洲美女在线观看播放| 亚洲av无码一区二区三区天堂| 亚洲嫩模在线观看| 亚洲VA中文字幕无码毛片| 国产亚洲成人在线播放va| 国产jizzjizz视频免费看| 女人与禽交视频免费看| 午夜性色一区二区三区免费不卡视频 | 亚洲精品午夜视频| 亚洲国产成人高清在线观看| 中文字幕第一页亚洲| mm1313亚洲精品国产| 免费在线观看中文字幕| 国产一级一片免费播放| 日本免费网站在线观看| 女性自慰aⅴ片高清免费| 无码人妻精品一二三区免费| 免费人成在线视频| 无人在线观看免费高清视频| 青春禁区视频在线观看直播免费| 亚洲免费网站在线观看| 成人免费视频69| 毛片免费全部播放一级| 女人被男人桶得好爽免费视频 | 亚洲aⅴ无码专区在线观看| 亚洲欧美日韩综合久久久| 亚洲熟女www一区二区三区| 亚洲日本在线电影| 精品一区二区三区免费毛片| 免费一级特黄特色大片| 久久不见久久见免费影院www日本 久久WWW免费人成—看片 | www在线观看播放免费视频日本| 51午夜精品免费视频|