關于重構,代碼的壞味道,應該重構的代碼

jopen 12年前發布 | 21K 次閱讀 重構

應該重構的代碼

1.重復的代碼:

重復代碼在同一個類中的不同方法中,則直接提煉為一個方法

如果重復代碼在兩個互為兄弟的子類中,則將重復的代碼提到父類中

如果代碼類似,則將相同部分構成單獨函數,或者用 Template Method 設計模式

重復代碼出現在不相干的類中,則將代碼提煉成函數或者放在獨立的類中 

2.過長的函數:

降低了可讀性,應該將獨立的功能提煉成新函數

3. 過大類

使得責任不清晰,容易造成重復代碼,混亂,應該將過大類的功能拆分成多個功能單一的小類

4.過長的參數列

過長的參數列難以理解,而且容易傳錯參數。應該將參數列表用參數對象替換

5.發散式變化:

一個類由于不同的原因而被修改。應該將類拆分成多個,每個類只因為一種變化而修改。

6.霰彈式修改

 與發散式變化相反,遇到變化時需要修改許多不同的類。應該將類似的功能放到一個類中

7.依戀情結:

函數對某個類的興趣高過對自己所處的類,通常是為了取其他類中的數據。應該將函數部分功能移到它感興趣的類中

8.數據泥團:

在多個地方看到相同的數據項。例如:

      多個類中相同的變量,多個函數中相同的參數列表,并且這些數據總是一起出現。應該將這些數據項放到獨立的類中

9.基本類別偏執:

對象技術的新手通常不原因在小任務上運用小對象,比如結合數值和幣別的money class,等,應該Replace Data Value with Object。

10.分支語句:

大量的分支、條件語句導致過長的函數,并且可讀性差。應將它變成子類或者使用 State和 Strategy模式

11.平行繼承體系

是霰彈式修改的特殊情況。一般是當你為某個類增加了一個子類,必須也為另一個類相應的增加一個子類。如果你發現某個繼承體系的 class名稱前綴和另一個繼承體系的class名稱前綴完全相同。變素有問題了。 應該讓一個繼承體系的實體(instance)指涉(參考,引用,refer to)另一個繼承體系的實體。

12 冗贅類(lazy class)

幾乎沒有用的組建 應該進行inline class

13.夸夸其談未來性

現在用不到,覺得未來可以用到的代碼,要警惕。應該將用不上的代碼去掉

14.過度耦合的消息鏈

 一個對象請求另一個對象,后者又請求另外的對象,然后繼續。。。。,形成耦合的消息鏈。應該公布委托對象供調用

15 純粹的數據類

  將數據類中數據以Public方式公布,沒對數據訪問進行保護。應該 將數據封裝起來,提供Get/Set方法。

16 過多的注釋

 代碼有著長長的注釋,但注釋之所以多是因為代碼很糟糕。先重構代碼,再寫上必要的注釋

17 令人迷惑的暫時值域

如某個instance變量僅為某特定情況而設,在變量未被使用的情況下猜測當初設置目的非常困難。應該建立一個新的class,把所有和這個變量相關的代碼都放到里面。

來自:http://my.oschina.net/u/572987/blog/94140

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!