第一章
重構(gòu)的基礎(chǔ):
我們需要為即將修改的代碼建立一套可靠的測(cè)試環(huán)境,為了使重構(gòu)的結(jié)果能夠得到保證,我們需要可靠的測(cè)試方式
分解并重組:
- 分解和重組的意義:
代碼塊越小,代碼的功能就越容易管理,代碼的處理和移動(dòng)也就越輕松。 - 當(dāng)我們提煉一個(gè)方法時(shí),我們必須知道可能出什么錯(cuò),如果提煉的不好,就可能給程序引入BUG
- 提煉代碼塊后,最好修改方法名和變量名使其更合理
思考:當(dāng)代碼塊未被提取時(shí),代碼塊中所使用的變量名的含義有時(shí)候會(huì)和提取后的含義變得不同,因此改名是有必要的,如書中所說:任何一個(gè)傻瓜都能寫出計(jì)算機(jī)可以理解的代碼,唯有寫出人類容易理解的代碼,才是優(yōu)秀的程序員 - 改名后,我們需要重新編譯并測(cè)試,確保沒有破壞任何東西
- 將代碼放到正確的位置,我理解最好是遵循高內(nèi)聚低耦合的原則
- 去除多余的變量或語句。盡量去除一些臨時(shí)變量,臨時(shí)變量往往引發(fā)問題,它們會(huì)導(dǎo)致大量參數(shù)傳來出去,在一些比較長(zhǎng)的方法中很容易跟丟他們,不利于閱讀。
- 重構(gòu)時(shí)最好小步前進(jìn),如此依賴犯錯(cuò)的幾率最小
- 重構(gòu)階段最好只考慮代碼結(jié)構(gòu)的合理性,由此可能會(huì)出現(xiàn)影響性能的操作,如:循環(huán)由一次變成了多次,作者認(rèn)為在重構(gòu)階段不必考慮這些,將代碼結(jié)構(gòu)盡可能做合理,讓自己處于有利的位置,性能問題交給后續(xù)的性能優(yōu)化。
多態(tài)的作用
- 如有必要,使用多態(tài)取代條件邏輯
- 將變化的部分放到對(duì)應(yīng)的類中
第二章
何謂重構(gòu)
- 重構(gòu)提供了一種更搞笑且受控的代碼整理技術(shù)
- 重構(gòu)不會(huì)改變軟件可觀察的行為--重構(gòu)之后軟件功能一如以往。
為何重構(gòu)
- 重構(gòu)改進(jìn)軟件設(shè)計(jì)
- 重構(gòu)是軟件更容易理解
- 重構(gòu)幫助找到BUG
有時(shí)候,我們盯著一大段代碼不停地看以期望找到BUG,但有時(shí)候這種工作效率很低,這時(shí)候不妨嘗試將這段代碼重構(gòu),搞清楚程序結(jié)構(gòu)的同時(shí),也清楚了自己所做的假設(shè),也許可以快速找到BUG - 重構(gòu)提高變成速度
何時(shí)重構(gòu)
- 添加功能時(shí)重構(gòu)
- 修改BUG時(shí)重構(gòu)
-復(fù)審代碼時(shí)重構(gòu)
重構(gòu)的難題
- 數(shù)據(jù)庫
解決辦法:在對(duì)象模型和數(shù)據(jù)庫模型之間插入一個(gè)分割層,這樣就可以隔離兩個(gè)模型各自的變化 - 修改接口
解決辦法:
- 如果重構(gòu)守法改變了已發(fā)布的接口,你必須同時(shí)維護(hù)新舊兩個(gè)接口,知道所有用戶都有時(shí)間對(duì)這個(gè)變化作出反應(yīng)。
- 盡量讓舊接口調(diào)用新街口
- 使用deprecation注解標(biāo)記舊接口
注意事項(xiàng):不要過早發(fā)布接口,盡量減少開放接口的數(shù)量
- 難以通過重構(gòu)手法完成的設(shè)計(jì)改動(dòng)
先想想重構(gòu)的狀況,適時(shí)決定是否進(jìn)行重構(gòu) - 何時(shí)不改重構(gòu)
- 既有代碼太混亂,重構(gòu)還不如重新寫一個(gè)來的簡(jiǎn)單
- 項(xiàng)目已經(jīng)接近最后期限,也應(yīng)該避免重構(gòu)
重構(gòu)與設(shè)計(jì)
- 預(yù)先設(shè)計(jì),編碼階段實(shí)施設(shè)計(jì)過程中,有可能會(huì)出現(xiàn)預(yù)先設(shè)計(jì)的解決方案無法解決的問題,這個(gè)時(shí)候引入重構(gòu)。
重構(gòu)與性能
- 三種快速編寫軟件的方法
- 時(shí)間預(yù)算法
這通常只適用于性能要求極高的實(shí)時(shí)系統(tǒng)
- 持續(xù)關(guān)注法
這種方法要求任何程序員在任何時(shí)候做任何事時(shí)都要設(shè)法保持系統(tǒng)的高性能,但這通常使程序難以維護(hù),根據(jù)統(tǒng)計(jì)數(shù)據(jù),如果一視同仁的·優(yōu)化所有代碼,90%的優(yōu)化工作都是白費(fèi)勁的,因?yàn)閮?yōu)化的代碼大部分很少被執(zhí)行 - 利用統(tǒng)計(jì)數(shù)據(jù),尋找程序中哪些地方大量消耗時(shí)間和空間,有目的的去進(jìn)行性能優(yōu)化