Rajith Attapattu
重構前的思考#
每個程式設計師在某個時刻都需要重構現有程式碼。但在動手之前,請先思考以下幾點,這可以為你和他人省下大量時間與痛苦。
重構的核心原則#
先盤點現有程式碼與測試
- 了解現有程式碼的優勢與弱點
- 保留優點的同時避免重蹈覆轍
- 我們都以為自己能做得更好——直到做出來才發現,和舊版一樣差(甚至更差)
抗拒全部重寫的誘惑
- 盡量重用現有程式碼,不管它看起來多醜
- 舊程式碼已經被測試、審查過,尤其是生產環境中的程式碼,可能包含多年累積的錯誤修復和變通方案
- 忽略這些歷史,你可能會重新遇到那些已被修復的神秘 bug
漸進式變更優於一次性大改
- 增量式的變更讓你更容易透過測試回饋來評估影響
- 一次看到上百個測試失敗會令人沮喪,且容易做出糟糕的決定
- 一次處理幾個測試失敗則容易得多
確保每次迭代後現有測試通過
- 補充新測試來涵蓋你的變更
- 不要輕易丟棄舊測試——表面上不適用的測試,值得深入了解其存在的原因
個人偏好和自尊不應成為重構的理由。 如果程式碼沒壞,不要因為風格或結構不合你意就去改它。「覺得自己能做得更好」也不是合理的理由。
常見的錯誤動機#
- 新技術不是重構的充分理由:除非成本效益分析顯示新語言或框架能帶來顯著的功能、可維護性或生產力改善,否則最好維持原狀
- 人會犯錯:重構後的程式碼不一定會比之前更好。作者親身經歷過數次失敗的重構嘗試——結果不漂亮,但這就是人性