22種代碼的壞味道,一句話歸納: 若是一段代碼是不穩定或者有一些潛在問題的,那麼代碼每每會包含一些明顯的痕跡。 正如食物要腐壞以前,常常會發出一些異味同樣。 咱們管這些痕跡叫作「代碼異味」。 參考資料: http://blog.csdn.net/sulliy/article/details/6635596 http://sourcemaking.com/refactoring/bad-smells-in-code Code smells Duplicated Code --------(重複代碼)難維護。 [解決方法]:提取公共函數。 Long Method ------------(函數長)難理解。 [解決方法]:拆分紅若干函數。 Large Class ------------(類大)難理解。 [解決方法]:拆分紅若干類。 Long Parameter List ----(參數多)難用,難理解。 [解決方法]:將參數封裝成結構或者類。 Divergent Change -------(萬能類)發散試修改,改好多需求,都會動他。 [解決方法]:拆,將老是一塊兒變化的東西放在一起。 Shotgun Surgery --------(天女散花的邏輯)散彈試修改,改某個需求的時候,要改不少類。 [解決方法]:將各個修改點,集中起來,抽象成一個新類。 Feature Envy -----------(紅杏出牆的函數)使用了大量其餘類的成員 [解決方法]:將這個函數挪到那個類裏面。 Data Clumps ------------(數據團)常一塊兒出現的一坨數據。 [解決方法]:他們那麼有基情,就在一塊兒吧,給他們一個新的類。 Primitive Obsession ----(偏心基本類型)熱衷於使用int,long,String等基本類型。 [解決方法]:反覆出現的一組參數,有關聯的多個數組換成類吧。 Switch Statements ------(switch語句) [解決方法]:state/strategy 或者只是簡單的多態。 Parallel Inheritance Hierarchies ---------------(平行繼承)增長A類的子類ax,B類也須要相應的增長一個bx。 [解決方法]:應該有一個類是能夠去掉繼承關係的。 Lazy Class -------------------------------------(冗贅類)若是他不幹活了,炒掉他吧。 [解決方法]:把這些再也不重要的類裏面的邏輯,合併到相關類,刪掉舊的。 Speculative Generality -------------------------(誇誇其談將來性) [解決方法]:刪掉 Temporary Field --------------------------------(臨時字段)僅在特定環境下使用的變量 [解決方法]:將這些臨時變量集中到一個新類中管理。 Message Chains ---------------------------------(消息鏈)過分耦合的纔是壞的。 [解決方法]:拆函數或者移動函數。 Middle Man -------------------------------------(中介)大部分都交給中介來處理了。 [解決方法]:用繼承替代委託。 Inappropriate Intimacy -------------------------(太親密)兩個類彼此使用對方的私有的東西。 [解決方法]:劃清界限拆散,或合併,或改爲單項聯繫。 Alternative Classes with Different Interfaces --(類似的類,有不一樣接口) [解決方法]:重命名,移動函數,或抽象子類。 Incomplete Library Class -----------------------(不完善的類庫) [解決方法]:包一層函數或包成新的類。 Data Class -------------(純數據類)類很簡單,僅有公共成員變量,或簡單操做函數。 [解決方法]:將相關操做封裝進去,減小public成員變量。 Refused Bequest --------(繼承過多)父類裏面方法不少,子類只用有限幾個。 [解決方法]:用代理替代繼承關係。 Comments ---------------(太多註釋)這裏指代碼太難懂了,不得不用註釋解釋。 [解決方法]:避免用註釋解釋代碼,而是說明代碼的目的,背景等。好代碼會說話。 --------------------- 版權聲明:本文爲CSDN博主「windcao」的原創文章,遵循CC 4.0 by-sa版權協議,轉載請附上原文出處連接及本聲明。 原文連接:https://blog.csdn.net/windcao/article/details/25773219