posts - 297,  comments - 1618,  trackbacks - 0
           

                 在書寫代碼時,有一些不好的習慣,形象點說,可以說成代碼的“壞味道”,以下是一些常見的代碼的壞味道:

          1.       Duplicated Code(重復的代碼)

          常見情況:

          1) 同一個類中class內的兩個函數含有相同表達式;

          2) 兩個互為兄弟的子類內含有相同表達式;

          3) 兩個毫不相關的類中出現重復的代碼。

          對于第1種情況,使用Extract Method重構規則提煉重復代碼,讓這兩個地點都調用提煉出的那段代碼。

                 對于第2種情況,首先使用Extract Method重構規則提煉重復代碼,接著將提煉出來的代碼使用Pull Up Method這條重構規則將其提取到超類中。

                 對于第3種情況,常常使用Extract Class重構規則將代碼提取到一個獨立的類中。

          2.       Long Method(過長的函數)

          99%的場合,要把函數變小,只需使用Extract Method重構規則。找到函數中適合集在一起的部分,將它們提煉出來形成一個新函數。

          3.       Large Class(過大類)

          可以使用Extract ClassExtract Subclass兩條重構規則將一個過大的類變成多個小的類。

          4.       Long Parameter List(過長參數列)

          如果“向既有對象發出一個請求”就可以取得原本位于參數列上的一份數據,那么可以通過Replace Parameter with Method重構規則來解決這個問題。還可以使用Rreserve Whole Object重構規則將來自同一對象的一堆數據手機起來,并以該對象替換它們。如果某些對象缺乏合理的對象歸屬,可使用Introduce Parameter Object重構規則為它們制造出一個“參數對象”。

          5.       Middle Man(中間轉手人)

          人們可能過度運用delegation。你也許會看到某個類接口有一半的函數都委托給其他class,這樣就是過度運用,可以使用Remove Middle Man這條重構規則之間和實責對象打交道。如果轉手人還有其他行為,可以運用Replace Delegation with Inheritance這條重構規則,將它變成實責對象的子類,這樣你既可以擴展原對象的行為,又不必負擔那么多的委托工作。

          6.       Incomplete Library Class(不完美的程序庫類)

          如果只想修改library classes內的一兩個函數,可以使用Introduce Foreign Method重構規則;如果想要添加一大堆額外行為,就得使用Introduce Local Extension重構規則。

          7.       Refused Bequest(被拒絕的饋贈)

          子類應該繼承超類的函數和數據,如果它們不想或不需要繼承,這就意味著繼承體系設計有誤,此時可以使用Replace Inheritance with Delegation重構規則。

          8.       Comments(過多的注釋)

          如果你需要注釋來解釋一段代碼做了什么,試試使用Extract Method重構規則;如果方法已經被提取出來,但還是需要注釋來解釋其行為,試試Rename Method重構規則;如果你需要注釋說明某些系統的需求規則,試試Intrduct Assertion重構規則。

          參考:
                《重構——改善既有代碼的設計》
          posted on 2008-06-22 13:56 阿蜜果 閱讀(2390) 評論(1)  編輯  收藏 所屬分類: Java


          FeedBack:
          # re: 《重構》學習筆記(一)——代碼的壞味道
          2009-03-28 20:57 | 齊曉亞
          同城拜師,希望不吝賜教  回復  更多評論
            
          <2008年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

                生活將我們磨圓,是為了讓我們滾得更遠——“圓”來如此。
                我的作品:
                玩轉Axure RP  (2015年12月出版)
                

                Power Designer系統分析與建模實戰  (2015年7月出版)
                
               Struts2+Hibernate3+Spring2   (2010年5月出版)
               

          留言簿(263)

          隨筆分類

          隨筆檔案

          文章分類

          相冊

          關注blog

          積分與排名

          • 積分 - 2296322
          • 排名 - 3

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 东源县| 亚东县| 平邑县| 靖西县| 榆林市| 甘洛县| 仙居县| 深州市| 平乐县| 喀喇| 西青区| 明水县| 沧州市| 牡丹江市| 双桥区| 北碚区| 三门峡市| 慈利县| 南城县| 来安县| 佛教| 巴塘县| 盱眙县| 手机| 高安市| 成安县| 盐津县| 漳平市| 岑巩县| 霍州市| 伊川县| 平谷区| 固镇县| 孝感市| 兴义市| 玉林市| 仁寿县| 龙川县| 乐昌市| 松滋市| 南康市|