# 《Legacy Code 中文版》章節導讀 & 推坑 共筆版本:https://hackmd.io/S4qlUZCTQrGYsBRc42CS2A?view ###### tags `推書 & 推坑` --- ![https://www.tenlong.com.tw/products/9789864344000?list_name=srh](https://cf-assets2.tenlong.com.tw/products/images/000/138/400/original/MP11914.jpg?1563786524) ## 前言 拖了一年半,終於把這本書看完第一遍了。工作上我沒有要解決別人的 legacy code,因為我還沒有這麼專業,可以真的幫到人而不是害人。因此首先要解決的,當然是自己欠下的技術債;也可說是一年半後,我的專案終於長成讓我無法忍受、需要重構的程度了。 ## 章節導讀 > ### 1~2 章 觀念建立,講述問題背景,和介紹 “測試” 為何也是開發方法的一部分。這兩個章節沒有提到解決 legacy code 的工具、技巧,但絕對是本書排名重要的章節之一。因為你要先了解問題、認同這個問題,才能內化後續學到的知識,並且讓你的工作品質、精神保持下去。 > ### 3~4 章 使用 Java 所需的物件導向知識,基於物件導向語言的 legacy code 問題探討,和測試工具介紹。 如果你使用的不是 Java,可以另外參照、複習所用語言的物件導向語法,或是對應的測試工具。例如 Python 的 unittest。另外,本書使用的開發方法為 TDD -- 測試驅動開發。TDD 並不是一種單元測試的流程、框架,而是基於單元測試的一種測試開發方法。 這兩章雖然是基礎複習,和問題討論,但是如果你從來沒有想過自己在幹嘛,或是想過自己在做什麼,那麼不論你用的是物件導向程式語言、還是結構化程式語言,應該看到這裡就會卡關了,會連問題、題目是什麼都無法理解。如果是這樣,建議先思考一下 1~4 章究竟在講什麼,思考問題是什麼。如果最後真的沒有問題,或是看不懂,可能你功力真的太強了,或是還不需要這本書。 > ### 5~11 章 本書重要的章節之二,一步步帶你學習如何建立單元測試 (是的,有可能你之前只是以為會寫單元測試),以及如何在 legacy code 中找出測試點、實現可用的測試替身 (test double),並且開始從中體驗到什麼是 “可被測試的程式”。如果你有搞懂自己在面對什麼問題,讀到這裡應該會有『原來是這樣、原來可以這樣解決的』的感覺,而不是繼續囫圇吞棗。建議先瀏覽過一遍,然後條列出你用得到的方法,立刻練習一遍。 > ### 12~24 章 延續之前的內容,開始針對大型專案、大型 (一大團) legacy code 的處理技巧。如果你前面的章節有認真研讀,並且加上實作練習 -- 特別是工作上的練習,那麼到這邊應該會輕鬆愉快,有豁然開朗的感覺。 > ### 25 章 本書重要的章節之三,探討如何 “解耦合”,其實就是回到基本功的部分,一開始就盡量把程式寫好,意思是寫出可以被測試的程式。 ## 後記 -- 如何面對 Legacy code 我們很難一開始就寫出沒有 bug 的程式,或者是不需要修改的程式。但是如果能夠融會貫通 “觀念建立”,研讀技術章節和實務上的刻意練習,學會在一開始就不要寫出 legacy code,就可以安心的修改、隨時有測試保護網支持。