重點摘要#
- 重複是邪惡的(Duplication is evil),重複性工作會拖慢開發速度
- 架構師寫的範例程式碼會被複製數十、數百甚至數千次
- 開發者複製程式碼時,通常是因為基礎設施程式碼可以被抽象化卻沒有被抽象化
- 消除重複是架構師的責任,這個「someone」就是你
詳細內容#
如果你的開發者在執行不需要太多思考的重複性任務,如果你能在程式碼中發現 copy-paste-modify 風格的程式碼——那麼你的團隊正在比應有的速度更慢,而奇怪的是,原因可能出在你身上。
兩個軟體開發的真理#
- 重複是邪惡的
- 重複性工作會拖慢開發速度
架構師的範例效應#
作為架構師,你設定了基調。你可能寫了一個端到端的垂直切片作為範例,這個範例到現在已經被複製了無數次。每當開發者複製任何東西——幾行程式碼、XML 檔案或一個類別——都是一個明確的信號:某些東西可以被簡化或完全抽象掉。
被複製的通常不是領域邏輯,而是讓程式運作所必需的基礎設施程式碼。你的範例中的程式碼和配置將成為系統中數十、數百甚至數千個切片的基礎。
發現重複的方法#
- 檢查配置檔案:應用到系統的另一個切片時,哪些需要改變、哪些不變?
- 檢查業務層方法:是否有包含交易處理、日誌記錄、認證、稽核等的重複模式?
- 資料存取層:除了實體和欄位名稱不同,是否其他程式碼都一樣?
- 看得更廣:是否有兩三行經常一起出現、操作不同物件卻感覺做同一件事的程式碼?
為電腦而非為人類而寫的重複程式碼,即使開發者習慣了,也依然會拖慢他們的速度。
解決之道#
消除重複可能需要:
- 提煉框架(harvest frameworks)
- 建立更好的抽象
- 設置 aspect framework
- 編寫小型程式碼生成器
重複不會自己消失,除非有人採取行動。那個人就是你。
— By Niclas Nilsson