Scott Meyers
介面設計的重要性#
軟體開發中最常見的任務之一就是介面規格設計(interface specification)。介面存在於各個抽象層次——最高層的使用者介面(UI)、最底層的函式介面、以及中間各層的類別介面和程式庫介面等。無論你是為終端使用者指定互動方式、與開發者協作定義 API、或是宣告類別的私有函式,介面設計都是工作的重要部分。
如果你做得好,你的介面將是令人愉悅且提升生產力的;如果做得差,它將成為挫折和錯誤的來源。
好介面的兩大特質#
容易正確使用(Easy to use correctly)#
設計良好的介面,使用者幾乎總是會正確地使用,因為那是阻力最小的路徑:
- 在 GUI 中,使用者總是點擊正確的圖示、按鈕或選單項目,因為那是最明顯且容易做的事
- 在 API 中,使用者幾乎總是傳入正確的參數和正確的值,因為那是最自然的做法
- 容易正確使用的介面,事情就是能順利運作
難以錯誤使用(Hard to use incorrectly)#
好的介面能預見使用者可能犯的錯誤,並使其變得困難——理想上是不可能:
- GUI 可以停用或移除在目前情境下無意義的指令
- API 可以透過允許參數以任意順序傳入來消除引數順序問題
如何設計好介面#
設計容易正確使用的介面的好方法是在介面存在之前就先演練它:
- 在白板上模擬 GUI,或用桌上的索引卡來嘗試
- 在底層程式碼建立之前就先撰寫對 API 的呼叫
- 走過常見的使用案例,指定你希望介面如何表現
- 從使用者的角度出發開發介面——這也是**測試先行開發(test-first programming)**的優勢之一
防止錯誤使用#
讓介面難以錯誤使用需要兩件事:
- 預見使用者可能犯的錯誤,並找到防止它們的方法
- 觀察介面在早期發佈中如何被誤用,然後修改介面來防止此類錯誤
防止錯誤使用的最佳方式是讓錯誤使用根本不可能。如果使用者不斷想撤銷一個不可逆的操作,試著讓操作變成可逆的。如果他們不斷傳入錯誤的值,修改 API 使其接受使用者想要傳入的值。
最重要的是,記住介面的存在是為了使用者的便利,而非實作者的便利。