重構改善既有代碼的設計—— 讀書筆記

雖然本人是計算機專業 畢業,但是也學過軟件工程這本課程的。但是在開發這幾年中,聽到架構二字,心中總是充滿敬畏。

後來和公司後端部門的架構師聊了以後,發現其實架構並沒有那麼神祕,給我的建議是——人人都可以做架構師。最起碼一位合格的程序員都要有一顆做架構師的心。

拿破崙曾說—— 不想做將軍的士兵不是好士兵。重構項目之後,也有了一些心得體會,所以再來拜讀重構改善既有代碼的設計 這本業內經典。

1. What’s 好的程序員?

任何一個傻瓜都能寫出計算機可以理解的代碼,唯有寫出人類容易理解的代碼,纔是優秀的程序員。

2. What’s 重構

所謂重構(refactoring) 是這樣一個過程:

在不改變代碼外在行爲的前提下,對代碼作出修改,以改進程序的內部結構。重構是一種經千錘百煉形成的有條不紊的程序整理方法,可以最大限度地減少整理過程中引入錯誤的機率。本質上說,重構就是在代碼寫好之後改進它的設計。

對此,I can not agree more…

重構確實是一個長期的過程,而且重構不是什麼非得把代碼大刀闊斧地改進一番才叫重構。在日常開發中,我們修改一函數名使之便於理解,也算是重構。

而且書中提到:

重構技術就是以微小的步伐修改程序,這樣如果犯錯,可以立即發現並糾正它。

對此,我深有體會,我在重構項目中,有時候會修改大量的代碼,最後編譯運行以後報錯,無奈只能回滾代碼。

2.1 容易被忽略的重構行爲

更改變量名是值得的行爲嗎?
書中給出我們的答案是:絕對值得

因爲好的代碼應該清楚表達出自己的功能,變量名稱是代碼清晰的關鍵。這就暗示我們,在閱讀自己的代碼時,也時刻保持着重構的心。

相信我,遇到變量名亂起的代碼,你會發瘋的。

書中也提到,合理地使用臨時變量,因爲它往往會引發問題。

3. Why 重構

  1. 改進軟件設計;
  2. 使軟件更容易理解;
  3. 幫助找出BUG;
  4. 提高編程速度;

良好的設計是快速開發的根本。


Kent Beck “兩頂帽子”的比喻:

  1. 添加新功能;
  2. 重構

4. When 重構

在現實開發中,往往出現開發者對CTO提出重構需求,然後申請時間去專門處理重構這件任務。然後夾雜着新需求,痛不欲生啊…

書中的作者也提到:反對幾乎任何情況下專門抽出時間進行重構。重構應該隨時隨地地進行

這裏作者貼心給我們一個三次法則——事不過三,三則重構。

  1. 第一次做某件事只管去做;
  2. 第二次做類似的事會產生反感,但無論如何還是可以去做;
  3. 第三次再做類似的事,就應該重構;

在項目開發過程中,什麼時候去考慮重構:

  1. 添加新功能時重構;
  2. 修復問題時重構;
  3. 複審代碼時重構;

審視一下自己的代碼是否需要立刻重構:

  1. 難以閱讀的程序,難以修改;
  2. 邏輯重複的程序,難以修改;
  3. 添加新功能時還需要改動已有代碼的邏輯,難以修改;
  4. 帶複雜的判斷條件的程序,難以修改;

5. 個人總結

團隊最好能先制定一些開發規範,避免代碼差異化過大;
團隊成員應該時刻關注自己的代碼質量;
書中有些方案不錯,但是在現實中實行起來卻非常困難…

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