讀書筆記之《重構》第二章

  重構原則。這一章介紹的概念性的東西有點多,作者在對其詳細解釋,我將其總結性的語句提取了出來。
  從何謂重構說起,將重構看作一個名詞,重構就是對軟件內部的一種調整,目的是不改變軟件功能,提高代碼可理解性,降低代碼修改的成本,一般來說都是對代碼的小改動。作爲動詞來講,重構表示使用一系列手法,不改變軟件功能,調整軟件結構。對軟件的修改也分兩種,這裏作者引入“兩頂帽子”的比喻,分別指代添加新功能和重構,我們應該在同一時間只專注於其中一種事情,重構的時候,就不要添加新功能,添加新功能時候,就不去重構,並且無論何時都要清楚自己在戴的是哪一頂帽子。
  爲什麼要重構呢。重構的目的是幫助程序員良好地控制自己的代碼。具體的作用有四種。一,重構幫助改進軟件設計。重構很像是在整理代碼,讓所有的代碼回到應有的位置上面,這裏我想起學習過的一個視頻中舉得例子,很亂的一個房間,地上亂七八糟的各種東西,早上起牀了,想找一雙襪子來穿,也許找到襪子還不算太難,但是要找到兩隻一樣的,還真要花點時間。如果我們找襪子的時候順便把房間整理一下,將衣服,襪子等各種東西歸類,下次再找襪子就會很輕鬆。重構同時消除重複冗餘的代碼,確定所有事務和行爲在代碼中只表述一次,使修改程序更容易,這正是優秀設計的根本。二,重構使軟件更容易理解。我們的代碼,寫出來之後,後面還會有別的人來閱讀,以對其做出修改或者添加一些功能,如果代碼易於理解,可以節省很多時間,也許過了段時間,自己再閱讀,也會方便了自己。重構可以幫助理解不熟悉的代碼,幫助程序員看到設計層面的東西,將理解帶入更高的層次。三,重構幫助找到bug,重構首先可以理清代碼的結構,因此可以更容易找到bug。四,提高編程速度。良好的設計師快速開發的根本,設計好,添加新功能也會更加方便快速。
  重構的時機,何時重構呢。事不過三,三則重構。重構應該是隨時進行的,而不是可以抽出一定的時間。本身重構就是爲了協助其他的事情,不要爲了重構而重構。可以在添加功能時候重構,主要原因是在添加功能時重構,可以幫助我更好理解功能,更方便添加功能。
修補錯誤時重構。前面提到的,重構可以幫助找出bug,重構理清的設計結構,找bug更快。
複審代碼時重構,複審代碼本身也是好處多多,重構可以幫助理解別人的代碼,更好的理解別人的代碼,幫助代碼的複審。
  關於重構的難題,一是數據庫,因爲大多數商用程序都與背後的數據庫緊密耦合在一起,這是難修改的原因之一。對於非對象數據庫,解決的辦法是在對象模型和數據庫模型之間插入一個分個層。二是修改接口。如果重構手法改變了已發佈的接口,儘量保留舊的接口,讓舊的接口調用新的接口。三是一些難以通過重構手法完成的設計改動。這種情況要先想象重構的情況,考慮比較好的重構方案。
  什麼時候不該重構呢。比如代碼太過混亂,重構還不如重寫代碼來得簡單,比如項目已近最後階段,也要避免重構,畢竟要考慮項目的進度。
  重構與設計。重構與設計互補,事先做好設計可以節省返工的成本。有時候重構可以取代預先的設計,按照最初的想法編碼,寫好讓項目運行起來然後再重構。重構可以帶來更簡單的設計,產生更好的設計。
  重構與性能。重構對軟件的性能會有怎樣的影響呢?很多時候,性能也比較重要,爲了良好的結構忽視性能也是不可取的,但是性能和結構不是衝突的,只是在有些情況下,確實造成影響,就需要考慮重構是否值得了。作者提供了三種快速寫軟件的方法,最嚴格的時間預算法,通常用於對性能要求極高的實時系統。第二種是持續關注發,要求在任何時候做任何事都要考慮到系統的高性能。第三種是利用上述百分之九十的統計數據,編寫時候不對性能作特殊關注,知道後面進入性能優化的時候,再按照特定的程序調整程序的性能。
  
  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章