重構原則
重構的幾個定義
重構(名詞):對軟件內部結構的一種調整,目的是在不改變"軟件之可察行為"前提下,提高其可理解性,降低其修改成本。
重構(動詞):使用一系列重構準則(手法),在不改變"軟件之可察行為"的前提下,調整其結構。
重構和性能優化的相同之處:通常都不會改變組件的行為,只會改變其內部結構。
重構和性能優化的不同之處:出發點不同。性能優化往往使代碼較難理解,但為了得到所需的性能,你不得不那么做。
兩頂帽子
添加新功能和重構是兩種截然不同的行為。添加新功能時,你不應該修改既有代碼,只管添加新功能。通過測試,你可以衡量你自己的工作進度;重構時你就不能再添加功能,只管改進程序結構。此時你不應該添加任何測試(除非你發現先前遺漏的任何東西),只在絕對必要(用以處理接口變化)時才修改測試。
軟件開發過程當中,你可能會經常更換帽子,但是無論在什么時候,都必須清楚自己戴的是哪一頂帽子。
重構的目的:
1、重構改進軟件設計
同樣完成一件事,設計不良的程序往往需要更多代碼,這常常是因為代碼在不同的地方使用完全相同的語句做同樣的事。因此改進設計的一個重要方向就是消除重復代碼。如果消除重復代碼,你就可以確定代碼將所有事物和行為都只表述一次,唯一一次,這正是優秀設計的根本。
2、重構使程序更容易被理解
要及時填補想要他做什么和告訴他做什么之間的縫隙。這種編程模式的核心就是“準確說出吾人所欲”。
這種可理解性還有另一方面的作用。我利用重構來協助我理解不熟悉的代碼。當我看到不熟悉的代碼,我必須試著理解其用途。我先看兩行代碼,然后對自己說:“噢,是的,它做了那些......”。有了重構這個強大武器在手,我不會滿足于這么一點腦中體會。我會真正動手修改代碼,讓他更好的反應出我的理解,然后重新執行,看它是否能夠仍然正常運作,以此檢驗我的理解是否正確。
3、重構助你找到臭蟲
重構能夠幫助我寫出強健穩固的代碼。
4、重構助你提高編程速度
良好設計是維持軟件開發速的的根本。重構可以幫助你更快速的開發軟件,因為它阻止系統腐敗變質,它甚至可以提高設計質量。
重構的時機
重構本來就不是一件“特別撥出時間做”的事情,重構應該隨時隨地進行。不應該為重構而重構,重構是因為你想做別的事,重構可以幫助你把事情做好。
事不過三,三則重構.
1、添加功能時一并重構
想要理解代碼-->重構-->理解代碼
想要添加特性-->重構-->更容易的添加特性
2、修補錯誤時一并重構
如果在修改錯誤的時候,不能一眼發現錯誤,說明需要重構。
3、復審代碼時一并重構
復審代碼有助于在開發團隊中傳播知識。
重構可以幫助我復審別人的代碼。
得到一定程度的理解-->想到一些點子-->重構-->進一步的理解-->更好的點子。如果不進行重構,我永遠也無法得到這樣的認識。
最好是一個復審者搭配一個原作者,共同處理這些代碼。復審者提出修改建議,然后兩人共同判斷這些修改能否通過重構輕松實現。果真能夠如此,就一起著手修改。
為什么重構有用(Why Refactoring Works)
---Kent Beck
程序具有兩面價值:今天可以為你做什么,明天可以為你做什么。大多數時候,我們都只關注自己今天想要程序做什么。不論是修復錯誤或是添加特性,我們都是為了讓程序能力更強,讓它在今天更有價值。
但是系統今天(當下)的行為,只是整個故事的一部分,如果沒有認清這一點,你無法長期從事編程工作。如果你“為求完成今天任務”而采取的手法使你不可能在明天完成明天的任務,那么你還是失敗。但是,你知道自己今天需要什么,卻不一定知道自己明天需要什么。也許你可以猜到明天的需求,也許吧,但肯定還有些事情出乎你的意料。
對于今天的工作,了解得很充分;對于明天的工作,我了解得不夠充分。但如果我純粹只是為今天工作,明天我將完全無法工作。
重構是一條擺脫束縛的道路。如果你發現昨天的決定已經不適合今天的情況,放心改變這個決定就是,然后你就可以完成今天的工作了。明天,喔,明天回頭看今天的理解也許覺得很幼稚,那時你還可以改變你的理解。
是什么讓程序如此難以相與?下筆此刻,我想起四個原因,它們是:
難以閱讀的程序,難以修改;
邏輯重復的程序,難以修改;
添加新行為時需要修改既有代碼者,難以修改。
帶復雜邏輯條件的程序,難以修改。
因此我們希望程序:(1)容易閱讀;(2)所有邏輯都只在唯一地點指定;(3)新的改動不會危及現有行為;(4)盡可能簡單表達邏輯條件。
重構是這樣一個過程:它在一個目前可以運行的程序上進行,企圖在“不改變程序行為”的情況下賦予上述美好性質,使我們能夠繼續保持高速開發,從而增加程序的價值。
posted on 2007-06-21 22:37
littlegai 閱讀(184)
評論(0) 編輯 收藏 引用