主板模式与平台碎片
--以Android的SurfaceView主板模式为例
1. SurfaceView与Camera平台碎片
Camera照相机能透过镜头去取得视像,然后将视像传递到SurfaceView窗口里呈现出来。例如下图的架构设计,就是缺乏抽换性的:

由于没有提供通用性(及标准化)的<I>接口,缺乏抽换性。架构师做了决策:SurfaceView搭配Camera。当业主于稍后出现时,业主没有选择的余地,常常不能满足各业主的特殊需求,而不想要这个产品或系统。这表示这个系统架构的设计是没有抽换性的,没有办法适应未来各种不可预期的环境变化(如业主的不同需求)。
于是,架构师可改采主板模式,订定通用性<I>接口,有效将SurfaceView与Camera两者之间的相依性(Dependency)降低,成为疏结合(Loosely Coupled)关系,预留了弹性,让业主在稍后出现时,能有决策的空间。这项新架构如下图所示:

其中的<SurfaceView + Callback>就是主板模式,直接整合了myPicture平台小碎片,也实际整合了Camera平台大碎片。如下图:
2. myPicture小碎片的角色
从SurfaceView的角度而言,它透过Callback接口整合了myPicture小碎片,然后透过myPicture将SurfaceHolder本身的接口传递给Camera大碎片。于是,Camera取得了SurfaceHolder的接口,就能藉由这接口而调用到SurfaceHolder里的函数,将影像传递给SurfaceView了。
由于Camera大碎片的接口被写在myPicture里,而不是写在SurfaceView或SurfaceHolder里,所以抽换掉Camera碎片时,只需要改写myPicture的代码即可,而不会影响到SurfaceView或SurfaceHolder。因此大幅降低了SurfaceView/SurfaceHolder与Camera两者之间的相依性,也就打幅提升了Camera大碎片的抽换性(互换性)。
这个myPicture小碎片就扮演<插件>(Plugin)的角色,而Camera大碎片则扮演<配件>的角色。如下图:
3.呈现了高度的抽换性(PnP)
一旦SurfaceView与Camera两者变成为疏结合(Loosely Coupled)关系了,当业主在稍后出现时,就能做弹性的抽换碎片了,也就是提升了互换性了。例如,委托App开发者把 SurfaceView联接到医院加护病房的仪器设备上。如下图所示:
所以,在Android框架的支持下,我们将医院加护病房的仪器联结到护士站的Android TV(电视机),让患者的病情及时传送到TV上。同时,TV也主动再将讯息及时传送到医生的手机或Pad上,让医生能进行实时性的决策,提供更高质量的服务。如下图所示:
由于SurfaceView与Camera两者变成为疏结合关系了,当业主在稍后改变了心意时,可以再度做弹性的抽换碎片了,也就是呈现了高度的互换性。例如,委托App开发者把 SurfaceView联接到OpenGL绘图引擎上。如下图所示:

基于SurfaceView的主板模式,App可使用SurfaceView来显示3D的动态绘图。其画面情境如下图所示:

架构师的职责不是对业主(或用户)的未来行为,进行明确的预测;而是针对未来环境的变化,创造更好架构来包容未来环境的变化。架构师要处理的是业主的未来行为的「变化」,而不是行为本身。软件主板模式是架构师用来包容未来变化的尚方宝剑。架构师的洞悉力愈好,规划出来的主板就愈能给业主高度的决策空间。具有这种优越架构的智慧型产品,就具备良好的抽换性和未来性,更能掌握美好的商机。◆
~ End ~