重點摘要#
- 許多元件框架和基礎服務被設計為通用目的,卻與實際應用脫節,最終往往無人使用
- 簡單優先於通用,使用優先於重用 — 當兩個方案同樣可行時,選擇較簡單的
- 追求投機性的通用化,往往會增加複雜性而非減少它
- 真正有效的通用化來自於理解具體案例的本質,而非猜測未來的需求
詳細內容#
元件框架、類別庫、基礎服務和其他基礎設施程式碼常見的問題是:許多被設計為通用目的,卻沒有參考具體的應用場景。這導致了大量令人眼花繚亂的選項和可能性,但往往未被使用、被誤用,或根本沒用。
大多數開發者在特定系統上工作。追求無邊界的通用性很少能很好地服務他們。通往通用性的最佳路徑,是透過理解已知的具體範例,聚焦於其本質,找到一個核心的共通解決方案。透過經驗達到簡潔,而非透過猜測達到通用。
簡單作為決勝點#
當有兩個同樣可行的設計方案時,選擇較簡單、基於具體需求的那個,而非吹噓通用性的複雜方案。較簡單的方案完全有可能(而且很可能)最終反而是更通用的。即使不是,把簡單的方案修改成你需要的樣子,也比修改一個號稱「通用」但方向不對的方案要容易得多。
投機性通用化的危害#
追求投機性的通用化往往導致:
- 基於後來被證明錯誤的假設
- 提供後來被證明無用的選擇
- 累積難以移除的包袱
- 增加開發者和未來架構師必須面對的意外複雜性(accidental complexity)
雖然許多架構師重視通用性,但它不應該是無條件的。人們為特定情境付費,他們有具體的需求,需要對該具體情境有價值的解決方案。如果我們太早拋棄具體性,追求模糊的可能性,最終會陷入一大堆棘手的配置選項、過度負擔的介面,和不太正確的抽象。
— By Kevlin Henney