我不想把重構說成治百病的萬靈丹,它絕對不是所謂的「銀彈」。不過它的確很有價值,雖不是一顆銀子彈,卻是一把「銀鉗子」,可以幫助你始終良好地控制自己的**。重構是個工具,它可以(並且應該)為了以下數個目的而被運用:
重構改進軟體設計 如果沒有重構,程式的設計會逐漸腐敗變質。當人們只為短期目的,或是在完全理解整體設計之前,就貿然修改**,程式將逐漸失去自己的結構,程式設計師愈來愈難通過閱讀原始碼而理解原本設計。重構很像是在整理**,你所做的就是讓所有東西回到應該的位置上。**結構的流逝是累積性的。愈難看出**所代表的設計意涵,就愈難保護其中設計,於是該設計就腐敗得愈快。經常性的重構可以幫助**維持自己該有的形態。 同樣完成一件事,設計不良的程式往往需要更多**,這常常是因為**在不同的地方完全使用相同的語句做同樣的事。因此改進設計的乙個重要方向就是消除重複**。這個動作的重要性著眼於未來。**數量減少並不會使系統執行更快,因為這對程式的執行軌跡幾乎沒有明顯影響。然而**數量減少將使未來可能的程式修改動作容易得多。**愈多,正確的修改就愈困難,因為將有更多的**需要理解。你在這兒做了點修改,系統卻不如預期那樣工作,因為你未曾修改另一處--那兒的**做著幾乎完全一樣的事情,只是所處環境略有不同。如果消除重複**,
你就可以確定**將所有事物和行為都只表述一次,唯一一次,這正是優秀設計的根本。
重構使軟體更易被理解 從許多角度來說,所謂程式設計,便是與計算機交談。你編寫**告訴計算機做什麼事,它的響應則是精確按照你的指示行動。你得及時填補「想要它做什麼」和「告訴它做什麼」之間的縫隙。這種程式設計模式的核心就是「準確說出吾人所欲」。除了計算機外,你的原始碼還有其他讀者:數個月之後可能會有另外一位程式設計師嘗試讀懂你的**並做一些修改。我們很容易忘記這第二位讀者,但他才是最重要的。計算機是否多花了數個鐘頭進行編譯,又有什麼關係呢?如果乙個程式設計師花費一周時間來修改某段**,那才關係重大---如果他理解你的**,這個修改原本只需一小時。 問題在於,當你努力讓程式運轉的時候,你不會想到未來出現的那個開發者。是的,是應該改變一下我們的開發節奏,對**做適當修改,讓**變得更易理解。重構可以幫助我們讓**更易讀。一開始進行重構時,你的**可以正常執行,但結構不夠理想。在重構上花一點點時間,就可以讓**更好地表達自己的用途。這種程式設計模式的核心就是「準確說出你的意思」。 關於這一點,我沒必要表現得如此無私。很多時候那個「未來的開發者」就是我自己。此時重構就顯得尤其重要了。 這種可理解性還有另一方面的作用。我利用重構來協助我理解不熟悉的**。當我看到不熟悉的**,我必須試著理解其用途,我先看兩行**,然後對自己說:「哦,是的,他做了這些,那些……」。有了重構這個強大**在手,我不會滿足這麼一點腦中體會。我會真正動手修改**,讓它更好地反映出我的理解,然後重新執行,看它是否仍然正常工作,以此檢驗我的理解是否正確。 一開始我所做的重構都像這樣停留在細枝末節上。隨著**逐漸簡潔,我發現自己可以看到一些以前看不到的設計層面的東西。如果不對**做這些修改,也許我永遠看不見他們,因為我的聰明才智不足以在腦子裡把這一切都想象出來。ralph johnson把這種「早期重構」描述為「擦掉窗戶上的汙垢,使你看得更遠」。研究**時我發現,重構把我帶到更高的理解層次上。如果沒有重構,我達不到這種層次。
重構助你找到臭蟲 對**的理解,可以幫助我找到臭蟲。……重構能夠幫助我更有效地寫出強固穩健的**。
重構助你提高程式設計速度 終於,前面的一切都歸結到了這最後一點:重構幫助你更快速地開發程式。 聽起來有點違反直覺。當我談到重構,人們很容易看出它能提高質量。改善設計、提公升可讀性、減少錯誤,這些都是提高質量。但這難道不會降低開發速度嗎? 我強烈相信:
良好設計是快速軟體開發的根本。事實上擁有良好設計才可能達成快速的開發。如果沒有良好設計,或許某一段時間內你的進展迅速,但惡劣設計很快就讓你的速度慢下來。你會把時間花在除錯上面,無法新增新功能。修改時間愈來愈長,因為你必須花愈來愈多的時間去理解系統、尋找重複**。隨著你給最初程式打上乙個又乙個的補丁,新特性需要更多**才能實現。真是個惡性迴圈。 良好設計是維持軟體開發速度的根本。重構可以幫助你更快速地開發軟體,因為它阻止系統腐敗變質,它甚至還可以提高設計質量。
為什麼要重構
在現實工作中,重構 更多被用來成為彌補缺陷 增加功能 修改設計等工作,而很多人潛意識裡也認為重構就是修改 重寫 而這往往曲解了重構的本意。重構是乙個過程,是建立在不違背外在行為的前提下,對 進行修改,改進程式的內部結構。重構不等於重新設計,軟體工程裡一定要先進行設計,再進行編碼,而如果你在之後對設計...
為什麼要重構
什麼是重構 重構,用最簡單的一句話說 就是要在不改變系統功能的情況下,對系統的內部結構進行重新調整。重構的最直接目的在於改進軟體系統的內部架構。乙個好的結構可以更加適應於需求的變化,更好的滿足客戶的需求,最大限度的延長軟體系統的生命週期。為什麼要重構 在不改變系統功能的情況下,改變系統的實現方式。為...
為什麼重構
改進軟體設計 一項主要的工作就是刪除重複的 使軟體更易被理解 為了給將來的自己看,給另乙個guy看。然後,你會看到更深遠的東西。擦掉窗戶上的汙垢,使你看得更遠 助你找到bugs kent beck 我不是個偉大的程式設計師 我只是個有著一些優秀習慣的好程式設計師而已。重構能夠幫助我更有效的寫出強固穩...