把例外消除、或在模組內屏蔽例外,只在「該例外資訊在模組外不被需要」時合理。
本章的例子(Tcl unset、Java substring)都符合這個條件——少數情境下呼叫端真的需要知道,仍可透過其他方式取得。
反例:屏蔽過頭#
某學生團隊的網路通訊模組:
- 把所有網路例外都吞掉:發生網路錯誤就丟掉,繼續執行
- 結果:使用該模組的應用無法察覺訊息遺失或對端伺服器失效
- 沒有這資訊,根本無法建構穩健的應用
這種情況下,模組必須暴露例外——即使會增加介面的複雜度。
一以貫之的原則#
例外的處理就像軟體設計的其他面向——判斷什麼重要、什麼不重要。
- 不重要的東西 → 越多隱藏越好
- 重要的東西 → 必須暴露