摘要:[Architecture] 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相關物件之間的互動流程。
待續...
能以更簡潔的文字與程式碼,傳達出程式設計背後的精神。
真正做到「以形寫神」的境界。