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