設計新模組時最常面對的問題之一:要做成通用(general-purpose)還是專用(special-purpose)?
兩種對立的論點#
通用派#
- 實作一個能解決多種問題的機制,不只滿足當下需求
- 未來可能有意外的用途,省下重做的時間
- 與第 3 章的「投資心態」一致:前期多花一點,後期省回來
專用派#
- 軟體系統的未來需求很難預測
- 通用方案可能塞進永遠用不到的功能
- 過度通用又往往無法很好地解決當下問題
- 應該聚焦今日需求,未來真的有更多用途時再重構成通用——這較貼近增量式開發
本章主張#
甜蜜點是:「稍微通用」(somewhat general-purpose)。
具體來說:
- 功能反映當下需求
- 介面應該足夠通用,能支援多種用途
- 介面對當下需求要好用,但不被當下需求綁死
結語#
通用介面相對於專用介面有許多優勢:
- 更簡單——方法更少,但更深
- 類別之間的分離更乾淨;專用介面則容易在類別之間洩漏資訊
- 把模組做成「稍微通用」是降低系統整體複雜性最好的方式之一