辨識一個乾淨、通用的類別比設計出一個來得容易。下列問題能幫你在「通用」與「專用」之間取得平衡。
問題 1:能涵蓋當下所有需求的最簡介面是什麼?#
- 在不削減能力的情況下減少 API 的方法數 → 通常意味著你正在創造更通用的方法
範例對比:
| 文字 API | 刪除相關的方法數 |
|---|---|
| 專用版 | 至少三個:backspace、delete、deleteSelection |
| 通用版 | 一個:服務上述三種用途 |
但減少方法數只在每個方法本身仍簡單時才合理。
如果為了讓方法數變少,必須加一堆額外參數 → 你可能並沒有真的在簡化東西。
問題 2:這個方法會在多少情境下被使用?#
- 為「單一特定用途」設計的方法(例如
backspace)→ 紅旗 - 看看能不能用一個通用方法取代多個專用方法
問題 3:這個 API 能輕鬆滿足當下需求嗎?#
這個問題能幫你判斷「是否走過頭」——把 API 弄得太簡單、太通用反而不好用。
反例:把文字類別做成「單字元操作」介面:
insert只插入單一字元delete只刪除單一字元既簡單又通用——但對編輯器很不好用:上層程式碼充滿迴圈才能處理範圍操作
對大批次操作而言,效能也很差
因此文字類別內建支援字元範圍操作才是更好的設計。
通用不等於原始;通用要服膺於「常見用法易用」。
判斷邏輯總結#
如果使用者必須寫大量額外程式碼才能用你的類別完成當下任務 → 這是紅旗:介面沒有提供正確的功能粒度。