如果想利用單一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組件。
你可以運用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組件。