• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            Dict.CN 在線詞典, 英語學(xué)習(xí), 在線翻譯

            學(xué)海苦作舟,書山勤為徑

            留下點回憶

            常用鏈接

            統(tǒng)計

            積分與排名

            Denoise

            English study

            Web技術(shù)

            數(shù)據(jù)壓縮

            一些連接

            最新評論

            代碼重構(gòu)-閱讀心得

            最近閱讀 Martin Flower 的《重構(gòu)》,對自己有許多啟發(fā),以前認(rèn)為一些正確的觀點現(xiàn)在看來也不那么正確了;同時發(fā)現(xiàn)對重構(gòu)的理解只有在閱讀了書之后更加徹底;在閱讀《重構(gòu)》之后我對其中幾點有點感觸:

            ?

            1. 在沒有具體閱讀《重構(gòu)》之前,我認(rèn)為重構(gòu)就是將代碼變的容易理解,容易維護,但在閱讀了《重構(gòu)》之后才發(fā)現(xiàn)重構(gòu)不僅可以利用到重新構(gòu)造已有的代碼,也可以幫助我們在閱讀代碼的過程中增加我們的對代碼理解的速度。其實我想每個學(xué)習(xí)編寫代碼的同行都在學(xué)習(xí)的過程中閱讀過別人的代碼,然后還有可能將別人的代碼拿到計算機上編譯運行來查看結(jié)果表現(xiàn)。實際上我認(rèn)為這在某種意義上屬于重構(gòu),只是重構(gòu)的粒度有多大,或許你修改別人的代碼一部分來查看修改的結(jié)果,從而幫助自己掌握軟件中的更多特性,或者說讓自己修改的代碼表現(xiàn)出原來的功能。 Martin Flower 說的就是如此,我們?nèi)绻麤]有得到別人完整的文檔,那我們怎么樣才能理解別人的代碼來,好的辦法就是我們一邊閱讀別人的代碼,一邊部分部分的修改他人的代碼,然后測試每次修改的結(jié)果與以前的結(jié)果是否一樣,如果一樣,那么你的重構(gòu)代碼是正確,那么你肯定能夠理解你自己寫的代碼吧(自己都不理解自己的代碼就不要干了);別人的代碼就這樣在我們一部分一部分重構(gòu)當(dāng)中被我們理解了。

            ?

            2. 以前我們寫代碼的時候喜歡設(shè)計,設(shè)計的我們認(rèn)為很詳細(xì)了,然后開始將所有的功能模塊都寫完,接著再調(diào)試,在調(diào)試的過程中我們可能花費比寫代碼長的多的時間。是的,因為你在運行一個復(fù)雜的東西,當(dāng)然不容易搞定了。 Martin Flower 認(rèn)為我們調(diào)試的時間可以不用那么長,原因是我們不能在寫完了一個復(fù)雜系統(tǒng)的時候再調(diào)試,我們可以先建立一個好的測試用例,在寫這個測試用例的過程中我們更能對整個系統(tǒng)了解,也能夠幫助我們寫代碼;然后我們一點點的寫,寫一部分測試一下,保證每次新寫的代碼都能正確運行,從而當(dāng)代碼寫完了,系統(tǒng)調(diào)試也完畢了。這樣的情況下可以認(rèn)為我們沒有在調(diào)試上花時間,我們把時間花在測試和編寫代碼上了。

            ?

            3. 以前認(rèn)為代碼當(dāng)中注釋越多越好。 Martin Flower 又一次給我們教訓(xùn)說,寫注釋是因為你的代碼已經(jīng)不能告訴代碼閱讀者他的真實意思了。是的,好的代碼可以通過很多方式表達(dá)其自身的含義,例如變量的名稱,函數(shù)的名稱等;就如一個比較條件判斷來說吧,我們有必要的情況下將這個即使很短的條件抽取一個方法,然后用方法名稱來告訴讀者判斷的真實意義,如果這里直接使用條件判斷就要讓讀者迷惑半天,當(dāng)然這里的前提是給變量和函數(shù)起一個合適的名字,這是考驗程序員真功夫的地方了。另外,這里說的不是說寫注釋不好,如我的目的是如果代碼可以描述意義了,注釋就不需要寫了,這樣就讓你省了一件事情:保證代碼和注釋的同步,這不是更好。

            ?

            4. 在之前我也認(rèn)為重構(gòu)會花費很大代碼,因為我們要理解代碼,重新編寫;但為了修改 BUG Martin Flower 告訴我們重構(gòu)是最快的。也許不相信,我也不相信,但他說的有道理,容易修改的 BUG ,當(dāng)然早就被修改了,那么剩下的 BUG 就很難找了,主要因為代碼中的邏輯不清楚,重構(gòu)可以改變這種情況,讓我們的代碼有條有理,那么當(dāng)然 BUG 就無處藏身了。

            ?

            5. 勇于接受變化。以前認(rèn)為用戶頻繁的變化需求是不可理喻,實際上是我們自己不可理喻,他們花錢當(dāng)然需要能提供高質(zhì)量的服務(wù);而 Martin Flower 認(rèn)為不用怕改變,我們有重構(gòu)工具,重構(gòu)可以讓我們代碼任何時候都是清楚的,容易修改的,那么變化是件快樂的事情不再象以前那樣艱難了。

            ?

            6. 重構(gòu)與性能不是對立的。重構(gòu)讓代碼容易理解,而性能讓代碼變的難以理解,不過我們在開始的時候應(yīng)該考慮怎么樣讓代碼容易理解和維護,這樣我們可以在后面適當(dāng)?shù)臅r候?qū)Υa的某部分進行輕松的性能改進工作。本人做性能改進工作有段時間了,想從龐大的雜亂無章的、不熟悉的代碼中找出性能的 bottleneck 的確不是一件容易的事情,我需要的是理解代碼,理解流程,那么如果一個結(jié)構(gòu)很好的代碼對于我來說就好對付多了。因此他們不是對立的,性能以重構(gòu)為基礎(chǔ)的。

            ?

            其實通過重構(gòu),最主要的目的是讓我們的代碼更清晰,更輕巧,更容易被維護,那么也就是我們有良好的代碼,于是我們還懼怕什么,什么都可以輕松搞定。同樣《重構(gòu)》認(rèn)為代碼隨時都是清晰的、輕巧的,一般你的代碼不再具有以上特點,那么我們就需要使用重構(gòu)了。
            本人說不當(dāng)之處請大家指教。

            posted on 2005-11-11 13:19 笨笨 閱讀(2102) 評論(2)  編輯 收藏 引用 所屬分類: 代碼重構(gòu)

            評論

            # re: 代碼重構(gòu)-閱讀心得 2006-08-16 10:30 子彈

            文章顯示有點亂……
            麻煩整理一下,THX  回復(fù)  更多評論   

            # re: 代碼重構(gòu)-閱讀心得 2006-08-16 11:38 笨笨

            不好意思,整理了  回復(fù)  更多評論   

            日本一区精品久久久久影院| 无码人妻久久一区二区三区| 国产香蕉97碰碰久久人人| 久久精品中文字幕有码| 久久婷婷五月综合成人D啪| 欧美一区二区三区久久综合 | 亚洲国产成人久久综合区| 亚洲精品乱码久久久久久自慰| 久久se精品一区精品二区| 伊人久久大香线蕉精品不卡 | 亚洲国产欧美国产综合久久 | 久久亚洲日韩看片无码| 国产一久久香蕉国产线看观看 | 亚洲国产成人精品女人久久久| 国内精品伊人久久久久av一坑| 欧美日韩精品久久久久| 精品久久久久久久| 久久久久AV综合网成人 | 伊人色综合九久久天天蜜桃 | 久久精品国产男包| 久久午夜福利电影| 国产高潮国产高潮久久久91| 国产成人久久精品激情| 亚洲精品乱码久久久久久按摩 | 久久精品国产精品青草 | 久久精品无码一区二区三区免费 | 伊人久久大香线蕉成人| 国产精品午夜久久| 国产综合免费精品久久久| 久久精品草草草| 精品国产91久久久久久久| 久久精品毛片免费观看| 久久久久99精品成人片欧美| 日韩精品久久无码人妻中文字幕| 狠狠色丁香婷婷久久综合五月| 欧美精品福利视频一区二区三区久久久精品| 国产成人综合久久综合| 99re这里只有精品热久久 | 中文精品99久久国产 | 久久久久久国产精品无码下载 | 国产99久久久国产精品~~牛|