重點摘要#

  • 重複是邪惡的(Duplication is evil),重複性工作會拖慢開發速度
  • 架構師寫的範例程式碼會被複製數十、數百甚至數千次
  • 開發者複製程式碼時,通常是因為基礎設施程式碼可以被抽象化卻沒有被抽象化
  • 消除重複是架構師的責任,這個「someone」就是你

詳細內容#

如果你的開發者在執行不需要太多思考的重複性任務,如果你能在程式碼中發現 copy-paste-modify 風格的程式碼——那麼你的團隊正在比應有的速度更慢,而奇怪的是,原因可能出在你身上。

兩個軟體開發的真理#

  1. 重複是邪惡的
  2. 重複性工作會拖慢開發速度

架構師的範例效應#

作為架構師,你設定了基調。你可能寫了一個端到端的垂直切片作為範例,這個範例到現在已經被複製了無數次。每當開發者複製任何東西——幾行程式碼、XML 檔案或一個類別——都是一個明確的信號:某些東西可以被簡化或完全抽象掉

被複製的通常不是領域邏輯,而是讓程式運作所必需的基礎設施程式碼。你的範例中的程式碼和配置將成為系統中數十、數百甚至數千個切片的基礎。

發現重複的方法#

  • 檢查配置檔案:應用到系統的另一個切片時,哪些需要改變、哪些不變?
  • 檢查業務層方法:是否有包含交易處理、日誌記錄、認證、稽核等的重複模式?
  • 資料存取層:除了實體和欄位名稱不同,是否其他程式碼都一樣?
  • 看得更廣:是否有兩三行經常一起出現、操作不同物件卻感覺做同一件事的程式碼?

為電腦而非為人類而寫的重複程式碼,即使開發者習慣了,也依然會拖慢他們的速度。

解決之道#

消除重複可能需要:

  • 提煉框架(harvest frameworks)
  • 建立更好的抽象
  • 設置 aspect framework
  • 編寫小型程式碼生成器

重複不會自己消失,除非有人採取行動。那個人就是你

— By Niclas Nilsson