張名明 凌旺 宮斌
(中國船舶重工集團公司第七二三研究所 江蘇省揚州市 225011)
在程序設計領域,處理數據,顯示數據通常占據了程序開發中大部分的工作量,而且后期為了適應不同或變化的數據,往往需要新增或修改流程已達成對變更和新數據的處理和顯示能力。通過對其中一些中小規模的程序,比如BIT 可視化程序在業務邏輯和業務規則比較穩定的情況下,元數據技術可用來描述程序中的數據邏輯,固化相關的業務規則,在程序運行時就可以通過改變數據來改變程序的行為。同時運用MVC 模式開發程序,方便分離數據元數據和視圖元數據,降低程序的復雜性,并提升維護性。
本文將簡述元數據技術和MVC 模式,并以此為基礎介紹在BIT 可視化程序中的應用,包括開發技術的介紹和討論,以及相應的設計實現。
元數據,英文中表示為Metadata,主要用來表述數據的屬性、結構和內容間的關系信息。在面向對象的程序設計范疇,元數據被解釋為:不能進行結構變更,只能通過改變賦值來變更程序行為的數據。在程序中元數據始終值用來解釋程序的行為,而且通過對不定位置的元素進行不同賦值還可以等價原程序行為[1]。
MVC 模式是軟件工程中的一種軟件框架模式,它把軟件系統分為模型(Model),視圖(View)和控制器(Control)三個基本部分[2]。用一種業務邏輯、數據、界面顯示分離的方法組織代碼,將業務邏輯聚集到一個部件里面,在改進和個性化定制界面及用戶交互的同時,不需要重新編寫業務邏輯。此模式通過對復雜度的簡化,使程序結構更加直觀。
MVC 模式中的模型用于處理應用程序中的數據邏輯部分,應用程序中的數據一般包括業務數據和業務規則兩部分,對于小規模的程序和業務邏輯比較明確的應用程序,可以采用元數據對業務數據和業務規則進行描述,如圖1所示,具體的步驟是:
(1)通過對數據邏輯進行分類,找到同類的數據。
(2)對同類的數據進行抽象、建模,采用元數據的形式對該模型進行描述,形成統一的自描述的結構體。
(3)利用該統一的結構體,對不同的數據類型進行實例化,使每類數據都有一條對應的元數據描述。
同樣對于視圖(View)中的同類顯示元素也可以抽象成統一的結構體,并用元數據進行描述。在模型數據和視圖數據都可以被元數據描述后,再將兩者間的關系也用元數據映射進行描述,比如將某類數據中的某段數據映射到某類視圖中的某個元素進行顯示,這種多對多的映射可以滿足各類模型數據的可視化需求。

圖1:使用元數據對模型建模的步驟
MVC 模式將視圖層和數據層分離,原本就具備耦合性低,重用性高,部署快,維護性高成本低等優點,但同時也存在一些不足,比如增加系統結構和實現的復雜性,將花費大量時間將MVC 模式應用到小型、中等規模的應用程序通常會得不償失。但從另一個角度分析,正是因為小型、中等規模的應用程序業務邏輯較清晰,適合運用元數據技術對業務規則和顯示邏輯進行建模,實現一套數據驅動的應用程序,最大化應用程序的重用性,從而彌補采用MVC模式造成較高成本的缺陷。
機內測試,簡稱BIT(Built-In-Test),是提高電路系統可測試性而提高系統工作可靠性,減少系統維護費用的關鍵技術[3]。相對于復雜的大系統,BIT 檢測系統可以算是一個中小型系統,而BIT 可視化則是其中一個重要的組成部分,優秀的BIT 可視化設計可以提高診斷能力,簡化設備維修,提高維修性,降低總體費用,延長產品的壽命。
優秀的BIT 可視化設計包括以下幾個方面:
(1)采用豐富的展示形式,使用狀態燈,狀態框圖,按鈕,狀態圖片等狀態元素,給用戶更直觀地展示元件的狀態。
(2)采用多層級的展示方式,按照如設備級,機柜級,板卡級等多層級的展示方式,使用戶可以更便捷地在各級間進行切換。同時盡量展示形式盡量設備內的真實布局,也可以使用戶對設備的布局結構有更深入的了解,也能更快速地定位問題。

表1:自定義插件功能表
(3)采用界面和數據分離的設計原則,開發一套可擴展的BIT 可視化程序框架,定義好BIT 可視化的流程和設計規范,后續開發者可以在這套框架上自由的設計和組合BIT 界面。
在基于元數據的MVC模型實現技術上采用QT平臺進行開發,首先QT 不光提供了一套控件方便開發者設計出一套精美的用戶界面。還構建了一套支持擴展QT 設計器的插件架構,以及相關的QtDesigner 模塊用于創建可以加載到設計器中的自定義插件,以及相關用于訪問設計器功能的類。
QT 的顯示框架包括了三個重要的部件:用戶界面文件,界面生成引擎,界面設計器,這三個部件,可以很方便的對BIT 界面進行設計,ui 文件作為BIT 界面的顯示模板,在運行時可以根據不同的數據顯示相應的BIT 狀態。
2.3.1 整體框架
在BIT 可視化程序的框架設計中采用MVC 模式進行框架設計,分為Model,View,Controller 三個層次組成,Model 層負責維護BIT 可視化程序的數據結構,并提供數據的存儲和查詢功能,包含MsgModel,PageModel 和Service 三個類。View 層負責維護每個BIT 可視化頁面,包含Page 和UIContainManager 兩個類。Control層負責聯系Model 和View 層,提供不同BIT 頁間的導航以及各種事件的響應功能,包含Router 類。
2.3.2 Model 層
Model 層根據報文,將設備不同層級的BIT 數據映射為Message 數據結構。對外通過Service 類提供數據,Service 類提供獲取每個Message 中數據項的接口,并提供標準的數據變化通知消息。
Model 層中提供MsgModel 類作為對BIT 數據的元數據管理類,它使用XML 進行元數據的配置,包含報文名稱,字段名稱,是否Bit,字段大小,字段默認值等屬性。
Model 層在提供PageModel 類,用于管理BIT 數據和界面(Page)間的元數據映射,它對應的元數據映射配置文件格式,包含:頁面名稱,控件名稱,控件屬性,報文名稱,報文字段等屬性。
Model 層中提供RulerModel 類用于配置各報文中的固定字段,輔助BIT 程序過濾出具體的報文。
最后Model 層通過Service 類完成對以上三個類的管理,并對外提供對內部BIT 數據的存儲功能。
2.3.3 View 層
View 層中每個QWidget 界面都是一個容器,通過QT 的界面生成引擎生成,根據界面配置ui 文件生成具體的頁面,包含設計頁面的相關控件,并對每個元素包含相關的屬性,并能夠響應具體的事件。Page 類主要記錄QWiget 中沒有BIT 可視化元素的索引,以方便對其進行查詢和賦值。UiContainManager 類則通過名稱記錄了Page 的索引,以方便管理Page 集合。
UIContainManager 類負責加載每個ui 文件,生成對應的頁面,并對頁面中需要動態設置的控件建立索引,具體的加載流程為首先讀取ui 文件夾文件,將每個ui 文件依次生成對應的Page,并對Page 中的控件書進行索引,記錄導航、板塊狀態、狀態燈以及狀態圖片插件的索引。
View 層中的自定義插件主要分為四種,對應的功能如表1所示。
2.3.4 Control 層
Control 層通過Router 類進行管理,通過對Model 和View 層的功能調用,提供不同BIT 頁間的導航以及各種事件的響應功能。
當加載一個頁面時,先對頁面上的導航插件進行事件綁定,注冊它們的點擊事件,然后根據pageModel 中的映射關系,將數據更新到page 中,并激活對應的page 進行顯示。
使用基于元數據的MVC 模型設計的BIT 可視化模塊,為BIT檢測提供了更靈活的BIT 界面布局和豐富的設計元素,極大的擴充了BIT 可視化的能力。同時基于QT 功能提供的BIT 可視化功能設計,實現了界面和業務邏輯的分離,為用戶行為設計師和開發人員并行工作提供了可能,為BIT 可視化模塊的模塊化,通用化提供了重要支撐。