設計新模組時最常面對的問題之一:要做成通用(general-purpose)還是專用(special-purpose)?

兩種對立的論點#

通用派#

  • 實作一個能解決多種問題的機制,不只滿足當下需求
  • 未來可能有意外的用途,省下重做的時間
  • 與第 3 章的「投資心態」一致:前期多花一點,後期省回來

專用派#

  • 軟體系統的未來需求很難預測
  • 通用方案可能塞進永遠用不到的功能
  • 過度通用又往往無法很好地解決當下問題
  • 應該聚焦今日需求,未來真的有更多用途時再重構成通用——這較貼近增量式開發

本章主張#

甜蜜點是:「稍微通用」(somewhat general-purpose)

具體來說:

  • 功能反映當下需求
  • 介面應該足夠通用,能支援多種用途
  • 介面對當下需求要好用,但不被當下需求綁死

結語#

通用介面相對於專用介面有許多優勢:

  • 更簡單——方法更少,但更深
  • 類別之間的分離更乾淨;專用介面則容易在類別之間洩漏資訊
  • 把模組做成「稍微通用」是降低系統整體複雜性最好的方式之一