Bad Smell (代碼的壞味道)


sourcemaking
sourcemaking

如果一段代碼是不穩定或者有一些潛在問題的,那么代碼往往會包含一些明顯的痕跡。
正如食物要腐壞之前,經常會發出一些異味一樣, 我們管這些痕跡叫做 “代碼異味”
今天讓我們一起來熟悉開發中經常出現的22種壞味道情形和解決方法。

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語句過多
switch語句過多
不良影響 解決方法
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

不良影響 解決方法
不完善的類庫 包一層函數或包成新的類

[https://sourcemaking.com/data-class]()

純數據類
純數據類
不良影響 解決方法
純數據類,類很簡單,僅有公共成員變量,或簡單操作函數 將相關操作封裝進去,減少public成員變量

Refused Bequest

繼承過多
繼承過多
不良影響 解決方法
繼承過多,父類里面方法很多,子類只用有限幾個 用代理替代繼承關系

Comments

太多注釋
太多注釋
不良影響 解決方法
太多注釋,這里指代碼太難懂了,不得不用注釋解釋 避免用注釋解釋代碼,而是說明代碼的目的,背景等。好代碼會說話

參考資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM