<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 297,  comments - 1618,  trackbacks - 0
     

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

    1.       Duplicated Code(重復(fù)的代碼)

    常見情況:

    1) 同一個類中class內(nèi)的兩個函數(shù)含有相同表達(dá)式;

    2) 兩個互為兄弟的子類內(nèi)含有相同表達(dá)式;

    3) 兩個毫不相關(guān)的類中出現(xiàn)重復(fù)的代碼。

    對于第1種情況,使用Extract Method重構(gòu)規(guī)則提煉重復(fù)代碼,讓這兩個地點都調(diào)用提煉出的那段代碼。

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

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

    2.       Long Method(過長的函數(shù))

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

    3.       Large Class(過大類)

    可以使用Extract ClassExtract Subclass兩條重構(gòu)規(guī)則將一個過大的類變成多個小的類。

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

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

    5.       Middle Man(中間轉(zhuǎn)手人)

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

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

    如果只想修改library classes內(nèi)的一兩個函數(shù),可以使用Introduce Foreign Method重構(gòu)規(guī)則;如果想要添加一大堆額外行為,就得使用Introduce Local Extension重構(gòu)規(guī)則。

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

    子類應(yīng)該繼承超類的函數(shù)和數(shù)據(jù),如果它們不想或不需要繼承,這就意味著繼承體系設(shè)計有誤,此時可以使用Replace Inheritance with Delegation重構(gòu)規(guī)則。

    8.       Comments(過多的注釋)

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

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


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

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

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

    留言簿(263)

    隨筆分類

    隨筆檔案

    文章分類

    相冊

    關(guān)注blog

    積分與排名

    • 積分 - 2294312
    • 排名 - 3

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲网红精品大秀在线观看| 亚洲AV成人一区二区三区观看 | 一区二区免费国产在线观看| 国产一区二区免费| 国产亚洲精品美女久久久| 中国毛片免费观看| 无码乱人伦一区二区亚洲| 久久国产精品免费看| 亚洲综合色一区二区三区小说| 国产午夜亚洲精品理论片不卡| 亚洲毛片不卡av在线播放一区| 亚洲精品无码国产| 国产在线观看无码免费视频| 国产成人亚洲精品狼色在线| 抽搐一进一出gif免费视频| 国产免费人人看大香伊| 国产精品小视频免费无限app| 国产精品99爱免费视频| 自拍偷自拍亚洲精品被多人伦好爽| 亚洲天天做日日做天天欢毛片| 亚洲av中文无码字幕色不卡| 日本大片在线看黄a∨免费| 免费无遮挡无遮羞在线看| 亚洲欧洲日产国码av系列天堂| 国产精品亚洲精品观看不卡| 国产精品极品美女免费观看| 狠狠综合亚洲综合亚洲色| 亚洲无av在线中文字幕| 无码乱肉视频免费大全合集| 亚洲av色香蕉一区二区三区| 亚洲精品无码不卡在线播放HE| 亚洲日韩精品无码专区加勒比☆| 国产精品白浆在线观看免费| 色在线亚洲视频www| 免费在线视频一区| 99久久免费中文字幕精品| 亚洲人av高清无码| 亚洲动漫精品无码av天堂| 成年在线网站免费观看无广告 | 久久国产色AV免费观看| 激情五月亚洲色图|