重構之維 關於重構及《重構》的隨想

2021-08-21 22:44:50 字數 1554 閱讀 2407

重構之維

——關於重構及《重構》的隨想

《重構》究竟重構了什麼?

不止一次地,我聽到我們這個行業裡的大師們對重構技術提出(至少是)置疑:「那是我們過去十五年裡一直在做的事」、「我從(上世紀)70年代就已經開始這樣做了」、「unix上的黑客們一直都是這樣做的」 ……這些說辭讓我很有興趣探其究竟。在這本《重構》裡,martin fowler到底給他的讀者們提供了什麼?《重構》,它是揭示新時代的福音書,還是換湯不換藥的廣告詞?

重構(名詞):對軟體內部結構的一種調整,目的是在不改變軟體可觀察之行為的前提下提高其可理解性、降低其修改的成本。

重構(動詞):使用一系列的重構動作,在不改變軟體可觀察之行為的前提下調整其結構。

這是乙個平實得有點乏味的定義。而重構,也就是這樣一種平實得近乎乏味的技術——或者套用我前面的話,生活方式。如同大多數習慣了c和c++的老程式設計師一樣,eric raymond在讀到這本《重構》時的第一反應是:「嘿,小夥子,不就是邊寫**邊修改嗎?我們管這個叫『hacking』 !」自然,順理成章地,他的第二反應是:「martin這傢伙,裝得他好象壓根不知道『hacking』這麼回事似的。他到底真傻還是裝傻?」

請容許我暫時打斷eric(抑或是你,我的讀者)的思緒。和中國的大學不同,伊利諾斯大學計算機系的博士學位不是那麼容易拿到的,尤其在當你的導師是ralph johnson時。william opdyke用他的博士**奠定了重構技術的理論基礎,而這篇博士**的核心則是對「行為保持」的研究。簡言之,在這篇**中,william用數學方法證明,在滿足特定條件的情況下,以特定形式進行的程式修改將不影響程式的行為(也即「行為保持」),並且行為保持的修改之間的組合也將繼續是行為保持的 。於是,從誕生的第一天起,重構技術的雙腳就牢牢地站在大地母親的懷抱中。

eric raymond之所以能成為自由軟體的代言人,很大程度上得利於敏銳的技術嗅覺。他的第三反應是:「嘿,martin介紹的這些東西的確比黑客們的辦法要好。」黑客文化向來缺乏理論家。當然,有那麼幾位注重方法學的「理論派」黑客,例如richard stallman、larry wall,還有我們的eric。但黑客們幾乎總是通過口耳相授、耳濡目染的方式來傳遞最重要的經驗,這也是不爭的事實。而martin fowler的重構技術,它建立在完備的理論基礎之上,並且有完善的方法學指導(包括小步迭代、頻繁構建、測試優先等「敏捷聯盟」倡導的實踐),這使得它不再完全依賴於程式設計師的天賦。黑客的價值觀是「你是笨蛋,所以你學不會hacking」,而重構的價值觀是「如果你不去學重構,你才真是個笨蛋」——相比之下,你會更喜歡哪一種呢?

黑客們會對重構和敏捷方法感到熟悉和親近。和hacking的傳統相似,重構的文化強調人重於過程與工具、軟體產品重於文件、與客戶的協作重於對合同的談判、積極回應變化重於遵循既有計畫。不同的是,重構文化有堅實的理論根基和方法學保障,還有最先進的工具提供支援,使得工作重壓之下的程式設計師能夠更加輕鬆地學習、使用它,並從中受益。

如果說unix和黑客是軟體開發的古希臘,重構就是讓古希臘的嚮往者們感到似曾相識的文藝復興。《重構》,以及martin fowler致力的敏捷聯盟,把程式設計師的心帶向浪漫的奧林匹斯之巔,並用最新的理論和技術賦予他們自由飛翔的翼。這,就是《重構》對軟體開發價值觀的重構。

關於重構(三)

今天不是太忙就索性將何為重構一併講完!上一節我們講到,為何重構?重構的好處 優點?我們接著將什麼是重構?其實這一解釋應該放在最前面,其實從我們上學開始都是這麼學習的,先說這是個什麼東東,然後再去說這個東東的優點,為什麼用它?為什麼我沒有這麼做?因為我就想不按常理出牌 自己yy一下,其實自我感覺我們打...

C 重構之四(提取介面重構)

提取介面 是一項重構操作,提供了一種使用來自現有類 結構或介面的成員建立新介面的簡單方法。當幾個客戶端使用類 結構或介面中成員的同一子集時,或者當多個類 結構或介面具有通用的成員子集時,在介面中嵌入成員子集將很有用。有關使用介面的更多資訊,請參見 介面 c 程式設計指南 提取介面 在新檔案中生成介面...

C 重構之五(移除引數重構)

移除引數重構 c remove parameters是一項重構操作,提供了一種將形參從方法 索引器或委託中移除的簡單方法。移除引數 會更改宣告 並在呼叫該成員的所有位置移除形參,從而反映新的宣告。要執行 刪除引數 操作,請首先將游標放在方法 索引器或委託上。當游標位於適當的位置時,若要呼叫 remo...