软件重构-笔记
軟件重構(gòu)-筆記
代碼重構(gòu)就是在不改變軟件系統(tǒng)外部行為的前提下,改善它的內(nèi)部結(jié)構(gòu)。
重構(gòu)也就是在軟件開發(fā)過程中,在需要的時(shí)候進(jìn)行軟件的結(jié)構(gòu)與設(shè)計(jì)調(diào)整,包括代碼整理。
與傳統(tǒng)的先設(shè)計(jì)再寫代碼不同的是,重構(gòu)是邊開發(fā)邊設(shè)計(jì),設(shè)計(jì)與開發(fā)并進(jìn)。
但并不是說重構(gòu)就不需要做初始設(shè)計(jì)<一開始完全不進(jìn)行設(shè)計(jì)而直接寫代碼>。
重構(gòu)是在一定的初始設(shè)計(jì)基礎(chǔ)上,在有了一個(gè)足夠合理的軟件結(jié)構(gòu)的基礎(chǔ)上進(jìn)行的,在開發(fā)過程中發(fā)現(xiàn)不足時(shí)調(diào)整設(shè)計(jì)與代碼。這里的初始設(shè)計(jì)不像傳統(tǒng)設(shè)計(jì)那樣刻求完美靈活可擴(kuò)展等。
重構(gòu)的特點(diǎn)非常適用于敏捷式開發(fā)。
重構(gòu)的時(shí)機(jī),什么時(shí)候需要重構(gòu)?
1,發(fā)現(xiàn)重復(fù)代碼。比如幾個(gè)函數(shù)反復(fù)調(diào)用同一段幾乎相同的代碼,這時(shí)就應(yīng)該把這段功能封裝為函數(shù)供使用。兩個(gè)類有相同的功能就應(yīng)該重構(gòu)這兩個(gè)類。
2,發(fā)現(xiàn)類過大,函數(shù)過長(zhǎng)。應(yīng)該拆分類為細(xì)化的小類,拆分函數(shù)為功能單一的小函數(shù)。
3,發(fā)現(xiàn)有兩個(gè)類有相似之處,應(yīng)該考慮抽出共同點(diǎn)放到一個(gè)新類中。發(fā)現(xiàn)有兩個(gè)功能相似的模塊如字符串處理,看是不是團(tuán)隊(duì)間兩個(gè)不同成員寫的,這是由于團(tuán)隊(duì)缺乏溝通,各做各的,在兩方不知情的情況下各自開發(fā)出了相同的功能模塊,做了無用功。
4,發(fā)現(xiàn)一個(gè)類頻繁的調(diào)用另一個(gè)類,就應(yīng)該考慮是不是該將兩個(gè)類合為一個(gè)類。發(fā)現(xiàn)兩個(gè)類之間相互頻繁的調(diào)用,就應(yīng)該考慮是不是從兩者中抽象另外一個(gè)類來消除兩個(gè)類之間的耦合。
5,發(fā)現(xiàn)過長(zhǎng)的調(diào)用鏈,一個(gè)類要經(jīng)過好幾步中間調(diào)用才調(diào)用到另一個(gè)類,就應(yīng)該考慮設(shè)計(jì)是不是過度封裝了,是不是有其它問題。
6,發(fā)現(xiàn)修改代碼時(shí)牽一發(fā)而動(dòng)全身,就應(yīng)該考慮是不是設(shè)計(jì)的抽象度不夠或代碼功能過度分散導(dǎo)致的。
7,發(fā)現(xiàn)當(dāng)前架構(gòu)應(yīng)對(duì)新需求時(shí)有些捉急,為了支持新功能必須做一些扭曲的處理或臨時(shí)的茍且,這時(shí)就應(yīng)該考慮擴(kuò)展現(xiàn)有架構(gòu)甚至要重新設(shè)計(jì)。
8,發(fā)現(xiàn)舊模塊無人能懂,非常難理解,或舊模塊問題很多,去修復(fù)它估計(jì)要花很大代價(jià),這時(shí)就應(yīng)該考慮是否放棄舊模塊重新寫一個(gè)。
posted on 2016-10-27 12:11 時(shí)空觀察者9號(hào) 閱讀(...) 評(píng)論(...) 編輯 收藏
總結(jié)
- 上一篇: 托管执行过程
- 下一篇: LUA GC 简单测试