什麼是 legacy code? 沒有自動測試保護的就是 legacy code 。
-Michael Feathers, 《Working Effectively with Legacy Code》
講直白一點,legacy code 就是沒爹沒娘沒靠山,被人射後不理的產物。
誰都可能欺負它、弄壞它,簡直就是一直像死了般卻仍在線上活著的產品程式碼。
什麼是 legacy code? 沒有自動測試保護的就是 legacy code 。
-Michael Feathers, 《Working Effectively with Legacy Code》
講直白一點,legacy code 就是沒爹沒娘沒靠山,被人射後不理的產物。
誰都可能欺負它、弄壞它,簡直就是一直像死了般卻仍在線上活著的產品程式碼。
在實務開發中,常使用簡單工廠(Simple Factory)以及策略模式(Strategy Pattern)來封裝實作細節,使得 context 流程抽象穩定,並達到開放封閉原則(Open/Close Principle, OCP)中所蘊含可抽換實作的彈性。
在 context 流程中,透過簡單工廠依據條件來取得 interface 的 instance 固然美好,卻往往因為與簡單工廠的 static function 直接耦合,而導致這段 context 流程無法進行 isolated unit test。
這篇文章的小技巧,就是要解決 developer 因可測試性而廢棄簡單工廠不用,反而大費周章改用抽象工廠(Abstract Factory Pattern)的問題。
當 legacy code 不具備可測試性,又想為其建立 isolated unit test 且不影響所有使用到這個 class 的場景端,可以透過 extract and override 的手法,使用繼承+覆寫,就能達到很有效益的 isolated unit test ,是針對 legacy code 撰寫 isolated unit test 最好用的技巧之一。