對應透明箱擴展性,黑箱擴展性指:源代碼不可查看/修改時,透過系統配置或專用腳本語言擴展系統。本文討論何時設計黑箱擴展有意義,及有效實現技巧。
程式輸入皆可視為語言,但配置腳本特徵:
非盡量增加擴展性。終極結果是單一應用透過腳本執行所有任務(如 Emacs),但腳本極長複雜。基本權衡:擴展性越強,用戶配置工作越多。通常最好確定較窄但通用的需求範圍,再針對具體環境擴展。XP 團隊證實:縮小範圍反而更易準時成功。
特定環境確定需黑箱擴展,且不增加過重負擔。常策略:先實現不可擴展的窄範圍版本(1.0),再於後續版本添加擴展性。因構建不可擴展版本更便捷,能讓客戶更快用於部分任務,銷售收益支持後續開發。
決定提供配置語言時,必須認清你在設計一種語言,需考慮同類問題:
忽略步驟極普遍,後果:難追蹤腳本錯誤(參見「破壞者資料錯誤模式」),甚至引發安全攻擊(如 Code Red 病毒源於輸入解析失誤,詳見 Ross Anderson《Security Engineering》)。
XML 優點:現成解析器/工具豐富,便於腳本跨應用重用(如分子 XML 描述重用於藥物設計工具),語義定義良好才能低成本重用。
XML 缺點:腳本冗長,編碼可執行代碼笨拙,工具資源開銷大。此時 S-Expression 為佳替代:單一括號形式,源自 Scheme,易於任何語言(含 Java)處理,不依賴反射式處理。
下期將示範基於 S-Expression 的配置語言簡單範例及其 Java 解釋器。