重點摘要#

  • 即使你的系統使用最新技術,對下一個接手的人來說它就是遺留系統
  • 系統應該從一開始就為維護者設計,確保清晰性、可測試性、正確性和可追溯性
  • 「Legacy」不是壞詞 – 它代表系統有持久性、符合期望、具有商業價值
  • 好的架構會自我文件化,讓不熟悉的人也能理解

詳細內容#

接受遺留系統的現實#

即使你的系統使用最前沿的技術開發,它對下一個接手者來說就是遺留系統。面對這個事實吧!軟體的本質就是技術會快速過時。如果你期望你的系統進入生產環境並存活超過幾個月,就需要接受維護開發者將需要修復問題這個事實。

為維護者設計#

這意味著你的系統需要具備以下特質:

  • 清晰性(Clarity)– 組件和類別的角色應該一目了然
  • 可測試性(Testability)– 系統是否容易驗證?
  • 正確性(Correctness)– 系統是否按設計運作?消除快速而骯髒的修補
  • 可追溯性(Traceability)– 緊急 bug 修復者能否在不熟悉程式碼的情況下快速診斷問題?

試著想像一個不同的團隊打開程式碼庫,試圖理解發生了什麼。好的設計會以多種方式自我文件化 – 不需要過度簡化或過度記錄。

重新看待「Legacy」#

「Legacy」在軟體圈往往被視為貶義詞,但實際上所有軟體系統最終都會戴上這個標籤。這不是壞事 – 它可能意味著你的系統是持久的、符合期望的、具有商業價值的。任何從未被稱為 legacy 的軟體系統,可能是在上線前就被砍掉了 – 這不是成功架構的標誌。

一個擁有醜陋依賴關係的龐大架構在生產環境中往往像籠中困獸一樣運作。請為那些可能需要除錯的(通常是較資淺的)開發者著想。

— By Dave Anderson