—— from Kent Beck
程序有兩面價值:今天的價值和明天的價值。但大多時候我們都只是關注今天的價值,也就是今天的程序能做什么。不論是修復錯誤或是添加特性,我們都是為了讓程序能力更強,讓它在今天更有價值。
但是系統當下的行為,只是整個故事的一部分,如果沒有認清這一點,你無法長期從事編程工作。如果你為求完成今天的任務而不擇手段,導致不可能在明天完成任務,那么最終還是會失敗。但是,你知道自己今天需要什么,卻不一定知道自己明天需要什么。也許你可以猜到明天的需求,也許吧,但肯定還有些事情出乎你的意料。
對于今天的工作,我了解得很充分:對于明天的工作,我了解得不夠充分。但是如果只是為今天的工作,明天我將無法工作。
重構是一條擺脫困境的道路。如果你發現昨天的決定已經不適合今天的情況,放心改變這個決定就是,然后你就可以完成今天的工作了。明天,喔,明天回頭看今天的理解也許覺得很幼稚,那是你還可以改變你的理解。
是什么讓程序如此難以 相與?眼瞎我能響起下述四個原因,它們是:
- 難以閱讀的程序,難以修改;
- 邏輯重復的程序,難以修改;
- 添加新行為時需要修改已有代碼的程序,難以修改;
- 帶復雜條件邏輯的程序,難以修改。
因此,我們希望程序:1.容易閱讀;2.所有邏輯都只有在唯一地點指定;3.新的改動不會危險現有行為;4.盡可能使用簡單表達條件邏輯。
重構是這樣一個過程:它在一個目前可運行的程序上進行,在不改變程序行為的前提下使其具備上述美好性質,使我們能夠繼續保持高速開發,從而增加程序的價值。