ivaneeo's blog

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

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks
          如果想利用單一class做太多事情,其內往往就會出現太多instance變量。一旦如此,Duplicated Code也就是接踵而至了。

          你可以運用Extract Class(149)將數個變量一起提煉 至新class內。提煉時應該選擇class內彼此相關的變量,將它們放在一起。例如“depositAmount”和 “depositCurrency”可能應該隸屬同一個class。通常如果class內的數個變量有著相同的前綴或字尾,這就意味有機會把它們提煉到某 個組件內。如果這個組件適合作為一個subclass,你會發現Extract Subclass(330)往往比較簡單。

          有時候class并非在所有時刻都使用所有instance變量。果真如此,你或許可以多次使用Extract Class(149)或Extract Subclass(330)。

          和[太多instance變量]一樣,class內如果有太多代碼,也是[代碼重復、混亂、死亡]的絕佳滋生地點。最簡單的解決方案(還記得嗎,我們喜歡 簡單的解決)是把贅余的東西消弭于class內部。如果有五個[百行函數],它們之中很多代碼都相同,那么或許你可以把它們變成五個[十行函數]和十個提 煉出來的[雙行函數]。

          和[擁有太多instance變量]一樣,一個class如果擁有太多代碼,往往也適合使用Extract Class(149)和Extract Subclass(330)。這里有個有用技巧:先確定客戶端如何使用它們,然后運用Extract Interface(341)為每一種使用方法提煉出一個接口。這或許可以幫助你看清楚如何分解這個class。

          如果你的Large Class是個GUI class,你可能需要把數據和行為移到一個獨立的領域對象(domain object)去。你可能需要兩邊各保留一些重復數據,并令這些數據同步(sync.)。Duplicated Observed Data(189)告訴你該怎么做。這種情況下,特別是如果你使用舊式Abstract Windows Toolkit(AWT)組件,你可以采用這種方式去掉GUI class并代以Swing組件。
          posted on 2005-08-18 14:41 ivaneeo 閱讀(235) 評論(0)  編輯  收藏 所屬分類: refactoring-從地獄中重生
          主站蜘蛛池模板: 刚察县| 莱州市| 普安县| 石首市| 金坛市| 凤山县| 汝阳县| 新平| 牙克石市| 宁乡县| 江油市| 雷波县| 武乡县| 巴林左旗| 卓资县| 迁安市| 本溪| 元阳县| 正阳县| 樟树市| 静海县| 定兴县| 确山县| 长治市| 富民县| 温州市| 临潭县| 怀远县| 淳化县| 宁津县| 建水县| 阿拉善右旗| 西城区| 武平县| 宣恩县| 阿图什市| 济宁市| 南木林县| 定州市| 乌什县| 吐鲁番市|