Maintain legacy code
Jump to navigation
Jump to search
cases of legacy code[edit]
legacy: require_once, include_once
- alternative: PHP系列 - Autoload 自動載入 « 不像樣工程師 Eric G. Huang's 學習日記
legacy: mysql_query, mysql_fetch_array
- alternative: PHP: PDO::prepare - Manual
legacy: foreach
- alternative: generators
legacy: nested if-else
- alternative: interface
(left blank intentionally) legacy: * alternative:
避免的 coding 習慣[edit]
- 避免使用簡化的的變數名稱,例如 $sd 或 $d 也許一開始還會記得,但是過一陣子就會忘記這是什麼
- 重複複製貼上的內容,但是內容可能常被其他使用者更改,導致內容更新困難,需要修改多處的程式碼
- 絕對路徑或絕對網址寫死在程式碼內,導致日後移機或對外公開網站服務時,需要修改多處的程式碼
- 存取檔案時將完整路徑,例如 D:/AppServ/www/abc.csv 寫死在程式碼內。可以改成使用相對路徑,例如 __DIR__[1] 代表檔案所在的資料夾。
- 將測試網址 (127.0.0.1 或 localhost) 寫死在程式碼內
- 容易閱讀的錯誤訊息:除了 500 Error ,如果可以讓使用者自行處理,建議改成容易閱讀的錯誤訊息。
- 「你那邊不能跑嗎?可是在我這邊跑起來是沒問題的。」通常問題出在開始者與程式執行的環境不同,需要檢查是否程式版本環境、相依套件版本。如果是網頁程式,則需要進一步檢查瀏覽器的快取與擴充套件是否衝突。
- 「昨天下班前明明還好的啊,怎麼今天我沒有還沒動它就壞了,」使用 Docker 重新建立執行環境,進行測試。
- 「程式一直找不到問題出在哪裡?」請搜尋單元測試。將複雜的資訊系統拆解成可測試的模組。
- 「Bug 不知道問題原因在那裡,但是這一版改完就可以動了」請搜尋單元測試。
further reading[edit]
- 王建興 (2009). 如何面對與避免Legacy Code | iThome 「Michael Feathers曾經對Legacy Code下了另一個定義,他認為Legacy和Non-Legacy Code區分的關鍵,在於測試。」
- Fukuball Lin (2015). iNDIEVOX 踏入演唱會售票之後的快速蛻變:How we build a scalable PHP website for ticketing // Speaker Deck
- zonble (2016). 怎樣寫出比較沒有問題的 Code 「不要寫 if。如果非要寫 if,不要亂寫 if。」