1. 封裝 (encapsulation)
其實封裝本來就是人們面對複雜度的一種本能,針對某一問題點的廣度與深度之間找到適
切的焦點。鄧小平就曾說過:「不管黑貓或白貓,能抓到老鼠的就是好貓」。其實這就是把系
統當作黑箱 (black-box)的封裝概念了。 :)
設計模式 (DP, Design Pattern)內的「Facade」,即為強調封裝某一主體 (context)內
部繁雜的細節。
例如,兩大平台的 Web MVC (Model/View/Control)是一種因應 Web 端的技術解決方案,
實際上 Controller 僅為 UI 端的控制邏輯,卻不適合擔任資料存取(data access)與邏
輯運算(business logic)的工作。所以在大型系統的開發上,一般會設計中間層的「領域
物件 (domain controller)」,將上述兩大類的工作 (資料存取/邏輯運算)由其當窗口
(entry-poing),再視工作性質,委派 (delegate)給專司其職的成員物件 (如
DAO/Utility, Business Object ...等)。
此時「Domain Controller」就是一種系統的「Facade」物件,封裝了資料存取與邏輯運
算的細節,UI 端 (Web/Standalone Form/Mobile App/外部系統)不需要知道如何處理,
只要能取得所需要的結果即可。
不僅程式寫碼,在 UML 的使用案例 (use case)需求分析技術中,就擅用了封裝的技巧 (
系統功能(主題)->程序/工作事項->細節(資料欄位/計算邏輯)),先抓大的操作目的,再
來包容善變的細節。
在軟體工程來說,這比較能造成「低耦合 (low coupling)」的效果。