大话重构 之 重构,企业级应用的圣经
為何重構如此重要?
說到重構,估計所有程序員都能想到出自Martin Fowler的《重構》一書。這本書究竟到了什么樣的高度呢?有人這樣說:
如果說《設計模式》是程序設計層次的圣經,《面向模式的軟件架構》是架構設計層次的圣經的話,《重構》則當之無愧地可以稱為企業級應用的圣經。
作為《優雅內涵》欄目第一個系列的《消滅壞味道》,會秉承大師的意志,教會大家:?
當然在優雅程序員這里,不需要看英文,也不需要看不那么本土化的代碼。
在開始消滅一個個壞味道之前,我們先來看看Martin Fowler大師是如何看待重構的:
為何重構?
我并不想說重構能夠解決軟件中所有的問題,它不是“銀彈”。然而重構是非常有價值的工具,它是你可以用來很好地控制代碼的“銀鉗子”。重構能夠,也應該,被用來完成軟件上的諸多目標。?
重構能改善軟件設計
不重構,程序的設計將隨著時間腐壞。如果碰到臨時需求跟設計有沖突,或者對設計沒有整體的理解,這時改代碼很難保證程序的設計不被破壞。隨著“破壞”的積累,不管誰都很難再從代碼中看出設計。重構更像是在整理代碼,它可以移除沒待對地方的代碼。程序設計的“破壞”有加速累計的效應。越難看到代碼里的設計,越難保持,然后腐壞的就越快。日常的重構能保持代碼的設計。
設計差的代碼完成相同的功能需要更多代碼,通常是因為有大量的重復,因此改善代碼設計的一個重要方面就是消除代碼重復。減少重復代碼并不會讓系統跑的更快,但是卻會給將來修改代碼帶來很大的不同。代碼重復越多,就越難保證正確修改,因為有更多代碼需要閱讀和理解。你改了這個地方后,系統并沒有按照你認為的方式工作,因為你沒有修改另外一個稍有差異但完成相同功能的地方。通過消除重復,你的代碼針對每件事情,只說一遍,并且是唯一的一遍,這是好設計的基本要素。
重構使軟件更易理解
編程是和計算機對話的一種方式。你寫代碼告訴電腦做什么,它嚴格執行后給予反饋。很容易的,你把“想要什么”和“告訴電腦怎么做”扯到了一起。你寫的代碼全是在說怎么做。但是你的代碼還有另外一個用戶,你的同事會在幾個月后為了完成某項功能而嘗試修改你的代碼。我們很容易忘記這個“額外”的用戶,然而這個用戶才是最重要的。有誰會關心電腦是否會多花點時間做編譯?重要的是你的同事可能要花一周才能看懂你的代碼,然后做個小修改。如果你的代碼容易看懂,他也許一個小時就可以搞定。
問題就是當你正在努力讓程序工作的時候,根本就沒有想到你的同事。當你的程序能工作的時候,花點時間重構可以讓你的代碼更有結構,更能表達出它的意圖。你的代碼應該總是在說你想要什么。也不是我無私,這個“同事”通常就是我自己。
我通過重構來理解不熟悉的代碼。當我看到不熟悉的代碼時,我必須試著理解它做了什么。通過重構,我并不只是停留在用腦子記,而是實際地把代碼修改成我理解的樣子,然后通過重跑程序(測試)來驗證我的理解是否正確。一開始的時候,我只能修改其中一些小的細節,當代碼修改的越來越清晰的時候,我發現能看到之前看不到的設計。如果沒有重構過這些代碼,可能永遠也無法理解到這些,我還沒有厲害到可以把這一切都虛擬到腦子里。當學習代碼的時候,重構可以逐步讓我理解高層的設計。
重構有助于找到Bug
幫助理解代碼也會幫我找到Bug。我承認我并不善于找Bug,有些人能夠僅僅通過讀一大段代碼就找出其中的Bug,我卻不能。然而重構代碼時,我會深入地理解代碼做了些什么,然后我帶著這些理解再去看新代碼時,有些Bug就不可避免的自然出現了。這讓我想起了Kent Back經常說的一句話“我并不是偉大的程序員,我只是有偉大習慣的好程序員。”重構讓我能高效地編寫高質量的代碼。
重構有助于提高編程速度
從前面的觀點可以看出:重構能幫助你提高編程速度。
聽起來有點不可思議。當我討論重構時,人們容易理解它能改進代碼質量。改進設計,可讀性,減少Bug,所有這些都是改進代碼質量。難道這些沒有降低了開發速度嗎?
我非常肯定好的代碼設計是軟件快速開發的基石。實際上,之所以要好的設計,就是為了快速開發。沒有好的設計,你只是快一時,不久后就會慢下來。你花費時間在找Bug,修復Bug,而不是實現新需求。當系統里面有重復代碼時,你要花更長的時間理解,花更長的時間修改代碼。當補丁上打補丁時,再加新需求會需要更長的時間,更多的代碼。
好的設計是軟件快速開發的必要條件,重構能夠幫你快速開發軟件,因為它不僅能防止設計腐壞,還能改善設計。
轉載于:https://www.cnblogs.com/yoyaprogrammer/p/refactor.html
總結
以上是生活随笔為你收集整理的大话重构 之 重构,企业级应用的圣经的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 算法 分析 (收集)
- 下一篇: oc基础-foundation框架中的常