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)”的效果。