一.重構原則
1.重構的定義
重構(名詞):對軟體內部結構的一種調整,目的是在不改變"軟體之可察行為"前提下,提高其可理解性,降低其修改成本.
重構(動詞):使用一系列重構準則(手法),在不改變"軟體之可察行為"前提下,調整其結構.
兩種定義都強調是在不改變"軟體的外部行為"前提下,不改變"軟體之可察行為"就是說讓修改不影響外部使用程式(程式師),在個外部來看,程式的行為和結果沒有任何的變化.重構只是對程式內部結構進行調整,讓代碼更加容易理解,然後更容易維護.
2.重構的好處
能改進軟體設計
使軟體更容易被理解
能幫你找到bug
提高軟體的開發速度
3.什麼時候進行重構
三次法則:事不過三,三則重構.意思是說,一件事情,第一次只管去做,第二次做類似的事情會產生反感,但無論如何還是做了,第三次再做類似的事情,你就應該重構.
在添加新功能時進行重構.
在修改bug時進行重構
在代碼復審時進行重構.
4.為什麼重構有用
難以修改的程式具有以下特徵:
難以閱讀的程式,難以修改
邏輯重複的程式,難以修改
添加新行為時需要修改現有的代碼,難以修改
帶複雜條件邏輯的程式,難以修改
好的程式應該是:
容易閱讀
所有邏輯都只在惟一地點指定
新的改動不會危及現有的行為
盡可能簡單的表達條件邏輯
5.間接層和重構
間接層的存在的價值:
允許邏輯共用
分開解釋意圖和實現
將變化加以隔離
將條件邏輯加以編碼
但是過多的間接層會導致代碼的層次太深,使代碼難以閱讀.因此要權衡加入間接層的利弊.
6.重構的難題
關聯資料庫與面向物件編程的問題:在物件模型和資料庫模型之間插入一個分隔層,這就可以隔離兩個模型各自的變化.升級某一模型時無需同時升級上述的分隔層即可.這樣的分隔層會增加系統複雜度.但是能增加靈活度.
修改介面的問題:修改已發佈的介面,因為已發佈的介面會供外部人員(其他公司)使用,因此,修改介面會導致引用介面的其他程式不修改程式就無法運行.修改介面的最好的辦法是增加一個新的介面,讓舊介面調用新介面.這樣原來的程式就不用修改了.對於介面的另一個建議是儘量不要發佈介面.
7.什麼時候不進行重構
現有的程式無法運行,此時應該是重寫程式,而不是重構
程式到了最後的交付期限
8.重構與設計
重構與設計是互補的,程式應該是先設計,而在開始編碼後,設計上的不足可以用重構來彌補.設計應該是適度的設計,而不必過度的設計.如果能很容易的通過重構來適應需求的變化,那麼就不必過度的設計,當需求改變時再重構代碼.
9.重構與性能
提高性能的三種方法:
時間預算法:在設計時就對程式花費的時間進行預算,通常用於性能要求極高的即時系統.普通的企業應用程式一般對性能要求不高.只要不太慢就可以了.
持續關注法:要求程式師在任何時間都要設法保持系統的高性能.這個方法有個缺陷,就是大部分的程式90%的優化工作都是白費勁,這樣會浪費大量的時間.
良好的分解方式:這個方式是在開發程式階段不對性能投以任何關注,直到進入性能優化階段,再分析程式中性能差的程式,然後對這些程式進分解,查出性能差的程式,進行優化.