若是一段代碼是不穩定或者有一些潛在問題的,那麼代碼每每會包含一些明顯的痕跡。
正如食物要腐壞以前,常常會發出一些異味同樣, 咱們管這些痕跡叫作 「代碼異味」。
今天讓咱們一塊兒來熟悉開發中常常出現的22種壞味道情形和解決方法。數組
不良影響 | 解決方法 |
---|---|
重複代碼,難維護 | 提取公共函數 |
不良影響 | 解決方法 |
---|---|
函數長, 難理解 | 拆分紅若干函數 |
不良影響 | 解決方法 |
---|---|
類大, 難理解 | 拆分紅若干類 |
不良影響 | 解決方法 |
---|---|
參數多,難用,難理解 | 將參數封裝成結構或者類 |
不良影響 | 解決方法 |
---|---|
萬能類,發散試修改,改好多需求,都會動他 | 拆,將老是一塊兒變化的東西放在一起 |
不良影響 | 解決方法 |
---|---|
天女散花的邏輯,散彈式修改,改某個需求的時候,要改不少類 | 將各個修改點,集中起來,抽象成一個新類 |
不良影響 | 解決方法 |
---|---|
紅杏出牆的函數,使用了大量其餘類的成員 | 將這個函數挪到那個類裏面 |
不良影響 | 解決方法 |
---|---|
數據團,常一塊兒出現的一坨數據 | 他們那麼有基情,就在一塊兒吧,給他們一個新的類 |
不良影響 | 解決方法 |
---|---|
偏心基本類型,熱衷於使用int,long,String等基本類型 | 反覆出現的一組參數,有關聯的多個數組換成類吧 |
不良影響 | 解決方法 |
---|---|
switch語句過多, 難以理解和維護 | state/strategy 或者只是簡單的多態 |
不良影響 | 解決方法 |
---|---|
平行繼承,增長A類的子類ax,B類也須要相應的增長一個bx | 應該有一個類是能夠去掉繼承關係的。 |
不良影響 | 解決方法 |
---|---|
冗贅類,若是他不幹活了,炒掉他吧 | 把這些再也不重要的類裏面的邏輯,合併到相關類,刪掉舊的 |
不良影響 | 解決方法 |
---|---|
誇誇其談將來性 | 刪掉 |
不良影響 | 解決方法 |
---|---|
臨時字段,僅在特定環境下使用的變量 | 將這些臨時變量集中到一個新類中管理 |
不良影響 | 解決方法 |
---|---|
消息鏈,過分耦合的纔是壞的 | 拆函數或者移動函數 |
不良影響 | 解決方法 |
---|---|
中介,大部分都交給中介來處理了 | 用繼承替代委託 |
不良影響 | 解決方法 |
---|---|
太親密,兩個類彼此使用對方的私有的東西 | 劃清界限拆散,或合併,或改爲單項聯繫 |
不良影響 | 解決方法 |
---|---|
類似的類,有不一樣接口 | 重命名,移動函數,或抽象子類 |
不良影響 | 解決方法 |
---|---|
不完善的類庫 | 包一層函數或包成新的類 |
不良影響 | 解決方法 |
---|---|
純數據類,類很簡單,僅有公共成員變量,或簡單操做函數 | 將相關操做封裝進去,減小public成員變量 |
不良影響 | 解決方法 |
---|---|
繼承過多,父類裏面方法不少,子類只用有限幾個 | 用代理替代繼承關係 |
不良影響 | 解決方法 |
---|---|
太多註釋,這裏指代碼太難懂了,不得不用註釋解釋 | 避免用註釋解釋代碼,而是說明代碼的目的,背景等。好代碼會說話 |