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