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