壞味道代碼總結(簡版)


本文總結轉載、參考資料:22種代碼的壞味道,一句話概括

如果一段代碼是不穩定或者有一些潛在問題的,那麼代碼往往會包含一些明顯的痕跡。
正如食物要腐壞之前,經常會發出一些異味一樣。
我們管這些痕跡叫做“代碼異味”。

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

(太多註釋)這裏指代碼太難懂了,不得不用註釋解釋。

[解決方法]:避免用註釋解釋代碼,而是說明代碼的目的,背景等。好代碼會說話。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章