重構代碼的原則

1.什麼是重構

重構(Refactoring):在不改變軟件的功能和外部可見性的情況下,爲了改善軟件的結構,提高清晰性、可擴展性和可重用性而對軟件進行的改造,對代碼內部的結構進行優化。

2.爲何重構

  1)改進軟件設計(整理代碼)

重構和設計是相輔相成的,它和設計彼此互補。有了重構,你仍然必須做預先的設計,但是不必是最優的設計,只需要一個合理的解決方案就夠了,如果沒有重構、程序設計會逐漸腐敗變質,愈來愈像斷線的風箏,脫繮的野馬無法控制。重構其實就是整理代碼,讓所有帶着發散傾向的代碼迴歸本位。

  2)提高代碼質量和可讀性,使軟件系統更易理解和維

 "任何一個傻瓜都能寫出計算機可以理解的程序,只有寫出人類容易理解的程序纔是優秀的程序員"。有些程序員總是能夠快速編寫出可運行的代碼,但代碼中晦澀的命名使人暈眩得需要緊握坐椅扶手,試想一個新兵到來接手這樣的代碼他會不會想當逃兵呢?

軟件的生命週期往往需要多批程序員來維護,我們往往忽略了這些後來人。爲了使代碼容易被他人理解,需要在實現軟件功能時做許多額外的事件,如清晰的排版佈局,簡明扼要的註釋,其中命名也是一個重要的方面。一個很好的辦法就是採用暗喻命名,即以對象實現的功能的依據,用形象化或擬人化的手法進行命名,一個很好的態度就是將每個代碼元素像新生兒一樣命名,也許筆者有點命名偏執狂的傾向,如能榮此雅號,將深以此爲幸。

對於那些讓人充滿迷茫感甚至誤導性的命名,需要果決地、大刀闊斧地整容,永遠不要手下留情!

  3)幫助儘早的發現錯誤(Defects)

孔子說過:溫故而知新。重構代碼時逼迫你加深理解原先所寫的代碼。程序員經常對自己的程序邏輯不甚理解的情景,曾爲此驚悚過,後來發現這種症狀居然是許多程序員常患的"感冒"。當你也發生這樣的情形時,通過重構代碼可以加深對原設計的理解,發現其中的問題和隱患,構建出更好的代碼。

  4)提高編程速度

良好設計是維持軟件開發速度的根本,重構可以幫助你更快的開發軟件。因爲它防止系統腐敗變質。甚至還可以提高設計質量。當你發現解決一個問題變得異常複雜時,往往不是問題本身造成的,而是你用錯了方法,拙劣的設計往往導致臃腫的編碼。

    改善設計、提高可讀性、減少缺陷都是爲了穩住陣腳。良好的設計是成功的一半,停下來通過重構改進設計,或許會在當前減緩速度,但它帶來的後發優勢卻是不可低估的。

3.何時重構

    1)重構應該是隨時隨地進行。不應該爲重構而重構。
    2)三次法則:第一次做某件事只管去做;第二次做類似的事會產生反感,但無論如何還是可以去做 第三次 再做類似的事情,就應該重構了。
    3)添加功能
    4)修復bug
    5)複審代碼,即Code Review時候
    重構可能會引入更多見階層,重構往往需要把大型對象拆成多個小型對象。把大型函數拆成多個小型函數。間接層是把雙刃劍:一是你需要管理多分內容。
    但間接層有以下作用:
    1)允許邏輯共享,小函數複用性高。
    2)分開解釋意圖和實現:可以選擇類名和函數名解釋實現意圖的做法。
    3)隔離變化
    4)封裝條件邏輯:對象有一種奇妙的機制:多態消息,可以靈活而清晰地表達條件邏輯。將條件邏輯轉化爲消息形式,往往能降低代碼的重複。增加清晰度並提高彈性。

4.何時不該重構

    1)代碼是在太混亂了,設計完全錯誤。
    2)如果項目已近最後期限,應該避免重構。  

    3)重構還不如重新編碼。即重構的工作量顯著的影響Estimate 

 

5.重構流程

   1)讀懂代碼(包括測試例子代碼)
   2)進行重構
   3)運行所有的Unit Tests 

6. 重構與設計

    1)很多人都把設計看作軟件開發的關鍵換進。而把編程看作只是機械式的低級勞動。
    2)另外的觀點就是:重構可以取代預先設計。你不必要做任何設計,只管按照最初的想法開始編碼,讓代碼運作,然後再將它重構成型。

    實際上重構與設計是互補的,程序應該是先設計,而在開始編碼後,設計上的不足可以用重構來彌補.設計應該是適度的設計,而不必過度的設計.如果能很容易的通過重構來適應需求的變化,那麼就不必過度的設計,當需求改變時再重構代碼 。

7.重構與性能

    三種快速編寫軟件的方法:
   1)時間預算法
        在設計時就對程序花費的時間進行預算,通常用於性能要求極高的實時系統.普通的企業應用程序一般對性能要求不高.只要不太慢就可以了 。
   2) 持續關注法
        要求程序員在任何時間都要設法保持系統的高性能.這個方法有個缺陷,就是大部分的程序90%的優化工作都是白費勁,這樣會浪費大量的時間 。
   3) 良好的分解方式
       這個方式是在開發程序階段不對性能投以任何關注,直到進入性能優化階段,再分析程序中性能差的程序,然後對這些程序進分解,查出性能差的程序,進行優化。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章