ivaneeo's blog

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

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

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

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

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

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

          如果你的Large Class是個(gè)GUI class,你可能需要把數(shù)據(jù)和行為移到一個(gè)獨(dú)立的領(lǐng)域?qū)ο螅╠omain object)去。你可能需要兩邊各保留一些重復(fù)數(shù)據(jù),并令這些數(shù)據(jù)同步(sync.)。Duplicated Observed Data(189)告訴你該怎么做。這種情況下,特別是如果你使用舊式Abstract Windows Toolkit(AWT)組件,你可以采用這種方式去掉GUI class并代以Swing組件。
          posted on 2005-08-18 14:41 ivaneeo 閱讀(235) 評(píng)論(0)  編輯  收藏 所屬分類: refactoring-從地獄中重生
          主站蜘蛛池模板: 高雄市| 芒康县| 邓州市| 社旗县| 临清市| 梅州市| 鱼台县| 大宁县| 洪江市| 昭苏县| 囊谦县| 文登市| 慈溪市| 漳平市| 湖州市| 永济市| 原平市| 巧家县| 合作市| 剑川县| 华蓥市| 虹口区| 桃园市| 芦溪县| 临洮县| 陆丰市| 文水县| 禄丰县| 东乡县| 边坝县| 青浦区| 津市市| 文水县| 惠安县| 广南县| 宁强县| 北宁市| 武平县| 云霄县| 闽侯县| 和龙市|