[Architecture Pattern] Device Projection (上)

动机 :

开发实时系统的时候,常常需要建立一组对象,用来映像远程设备。
透过这组对象呈现远程设备的状态、通知。
使用这组对象封装远程设备的操作、管理。

 

但在映像远程设备提供上述功能之前。
还需要提供探索远程设备的功能,建立远程设备列表。
这样才能完整的提供服务。

 

本文介绍一个『Device Projection 模式』,
定义对象之间的职责跟互动,用来封装映射远程设备所需要提供的功能。
让开发人员在需要实做相关功能时,能有一个参考的架构。

 

结构 :

下图是这个模式的示意图,整个看起来有点复杂。
我们将图拆解开来说明,会比较方便了解。

 

Device相关对象 :
首先是Device相关对象,这组对象主要是提供下列的功能:
-透过这组对象呈现远程设备的状态、通知。
-使用这组对象封装远程设备的操作、管理。

 

主要的参与者有:
IDeviceSketch
-封装远程设备的标识属性的接口。
-以网络联机的设备来说,IDeviceSketch的标识属性,可能采用IP当作标识属性。

 

IDeviceControl
-在呼叫启动方法之后,主动提供实时信息、封装操作的接口,是Device专用的主动式对象。
-以网络联机的设备来说,IDeviceControl提供设备联机状态、远程控制指令等等。

 

Device
-实际提供给外部模块使用的对象。
-封装转接 IDeviceControl、IDeviceSketch所提供的属性跟方法。
-并且接受 额外IDeviceSketch当作属性来源,更新Device属性数据。

 

另外我们也可以发现到主要参与的对象,都实做了INotifyPropertyChanged接口。
这是一个包含在System.ComponentModel内的接口,主要用来提供属性质变更的事件通知。
『Device Projection 模式』使用这个接口,来通知外部模块属性质变更。

 

透过下面的图片说明,可以了解Device相关对象之间的互动流程。

 

 

 

 

 

DeviceManager相关对象 :
再来看看DeviceManager相关对象,这组对象主要是提供下列的功能:
-探索远程设备的功能,建立远程设备列表。

 

主要的参与者有:
IDeviceSketchExplorer
-在呼叫启动方法之后,主动提供探索远程设备的接口,是DeviceManager专用的主动式对象。
-当探索到新的远程设备加入系统时,建立新的IDeviceSketch并且发出事件通知。
-当探索到旧的远程设备离开系统时,建立新的IDeviceSketch并且发出事件通知。

 

IDeviceFactory
-这个接口主要是封装建立Device与更新Device的功能,将相关的相依对象从系统里切割。
-并且也负责了Device所需要的IDeviceControl接口的建立,将相关的相依对象从系统里切割。

 

DeviceCollection
-模式内部Device对象实际存放的集合对象。
-除了提供模式内部存取之外,也开放给外部模块使用。

 

DeviceManager
-主要提供模式功能的对象。
-接受IDeviceSketchExplorer发出的事件,新增修改删除DeviceCollection的内容。
-使用IDeviceFactory,建立、更新Device对象。
-作为整个模块的Host,开放DeviceCollection属性提供外部模块使用。
-当有远程设备加入或移出系统时,发出事件通知。

 

透过下面的图片说明,可以了解DeviceManager相关对象之间的互动流程。

 

 

 

 

 

待续...

posted @ 2012-01-28 23:46  Clark159  阅读(1213)  评论(2编辑  收藏  举报