作者:高煥堂

秦皇岛数字家庭产业与应用联盟

重要参考文章

 

内容

  • 领悟EIT造形
  • EIT造形与未来性
  • 运用简单的EIT造形,设计出未来性

 

1.  领悟EIT造形

       兹回忆,于十七世纪中,牛顿提出了简单公式(即造形):F=ma;让人们能轻易理解物体运动的复杂<关系>。再如,于二十世纪初,爱因斯坦发表了简单公式:E=MC平方;让人们能理解复杂的质量、能量与光速之间的复杂关系。同样地,高焕堂老师提出了简单的”EIT软件造形”;则让人们能理解Android多层框架体系里的复杂关系。有了架构设计造形的<简单性>,人们就很容易理解软件的复杂关系,进而提升了掌握软件系统复杂多变的能力,唯有熟谙此道,才能创造架构和产品的<未来性>。
       在此文章里,一方面藉由简单的EIT造形来理解Android平台里的SurfaceView框架结构;另一方面则从SurfaceView来深入领悟EIT造形的妙用和意义;例如提升架构设计决策的<未来性>等。

2.  EIT造形与未来性

       Camera摄像头能去取得视像,然后将视像传递到SurfaceView窗口里呈现出来。那么,SurfaceView与Camera两者之间,该以何种形式的架构来组合,才会具有未来性呢? 最常见的途径是,采用EIT造形。首先,来看看下图所示的架构设计,它是缺乏未来性的:


图1、少了未来性的决策

       架构师(即框架开发者)做了决策:SurfaceView搭配Camera。当业主于稍后出现时,业主没有选择的余地,常常不能满足各业主的特殊需求,而不想要这个产品或系统。这表示这个系统架构的设计是没有未来性的,没有办法适应未来各种不可预期的环境变化(如业主的不同需求)。

3.  运用简单的EIT造形,设计出未来性

       于是,架构师可以藉助于EIT造形,将SurfaceView与Camera两者的相依性(Dependency)降低,成为疏结合(Loosely Coupled),预留了弹性,让业主在稍后出现时,能有决策的空间,并委托App开发者把其决策写在<T>(即应用子类别)里。首先,设计<E&I>,如下图所示:


图2、设计出<E&I>

       就像一部汽车,SurfaceHolder就像一个引擎;而SurfaceHolder.Callback接口就像轮盘。其中,SurfaceView和其内含的SurfaceHolder一起扮演<E>的角色;而Callback接口就是<I>角色了。上图呈现了Android里常用的SurfaceView小框架,基于我们脑海里的EIT造形,就很容易联想到,这个<E>将会透过<I>来呼叫<T>,当然也可以反过来,让<T>呼叫<E>了。如下图:


图3、SurfaceView框架里的EIT造形

       于此图里,SurfaceHolder.Callback扮演<I>的角色,SurfaceView(含SurfaceHolder)扮演<E>的角色,而myRenderer扮演<T>的角色。SurfaceView引擎透过Callback接口,呼叫了myRenderer的surfaceCreated()等函数。
       值得留意的是,从“Callback”字眼上,很容易把你引导到<T>本位的观点。此观点下,你会认为上图的<T>(即myRenderer)是主动者),它先呼叫SurfaceHolder的lockCanvas()等函数,才引发SurfaceView基类的反向呼叫(Callback)到接口的surfaceCreated()函数。这只是一个观点,并没有对错。你也可以换个新观点:<E>是主动者。例如上图里:

  • 首先,<E>(即SurfaceView)向Android的WindowManagerService(和SurfaceFlinger)系统服务取的一个Surface(即一个绘图的内存缓冲区),将它包装于<E>里的SurfaceHolder里。
  • 然后,<E>透过Callback接口来呼叫<T>(即myRenderer类)里的surfaceCreated()函数,此时将该SurfaceHolder(的指针或参考)传递给<T>。
  • <T>才依循刚才传来的指针(或参考)而呼叫到<E>里的lockCanvas()等函数。

       以上是基于你熟悉的EIT简单造形来理解复杂的SurfaceView框架。上图里的EIT造形,可表示为:{SurfaceView, SurfaceHolder.Callback, myRenderer}造形。如果只想呈现出框架部分(即<E>和<I>元素),可表示为:{SurfaceView, SurfaceHolder.Callback, <T>}。
       基于EIT造形,就很容易联想的如何使用SurfaceView框架,来与Camera进行组合,做出具有未来性的设计。


图4、简单的EIT造形,创造了弹性的决策空间

       一旦SurfaceView与Camera两者变成为疏结合(Loosely Coupled)关系了,当业主在稍后出现时,就能做弹性的组合了。例如,所以,在EIT造形的概念下,我们很容易联想到,可委托开发者把护士站的Android TV/STB联接到医院加护病房的仪器设备上。如下图所示:


图5、弹性的决策空间,创造了系统的未来性

       这可以将医院加护病房的仪器让患者的病情及时传送到护士站的Android TV/STB上。然后,TV/STB则能主动地将讯息及时传送到医生的手机或Pad上,让医生能进行实时性的决策,提供更高质量的服务。如下图所示:


图6、医院ICU的实时讯息传递系统架构

4. 结语

       由于EIT造形的<简单性>,让人们能拥有能力来面对复杂多变的需求。从图4和图5可以看出,目前Android的SurfaceView框架幕后就是一个EIT造形。基于高焕堂老师提出的简单”EIT软件造形”,你就能容易理解Android多层框架体系里的复杂关系。有了架构设计造形的<简单性>,你就提升了掌握软件系统<复杂性>的能力;同时,基于对EIT用途的熟悉,你也能轻易联想到SurfaceView的更多用途了。

~ end ~