張名明 凌旺 宮斌
(中國船舶重工集團公司第七二三研究所 江蘇省揚州市 225011)
在程序設計領域,處理數(shù)據(jù),顯示數(shù)據(jù)通常占據(jù)了程序開發(fā)中大部分的工作量,而且后期為了適應不同或變化的數(shù)據(jù),往往需要新增或修改流程已達成對變更和新數(shù)據(jù)的處理和顯示能力。通過對其中一些中小規(guī)模的程序,比如BIT 可視化程序在業(yè)務邏輯和業(yè)務規(guī)則比較穩(wěn)定的情況下,元數(shù)據(jù)技術可用來描述程序中的數(shù)據(jù)邏輯,固化相關的業(yè)務規(guī)則,在程序運行時就可以通過改變數(shù)據(jù)來改變程序的行為。同時運用MVC 模式開發(fā)程序,方便分離數(shù)據(jù)元數(shù)據(jù)和視圖元數(shù)據(jù),降低程序的復雜性,并提升維護性。
本文將簡述元數(shù)據(jù)技術和MVC 模式,并以此為基礎介紹在BIT 可視化程序中的應用,包括開發(fā)技術的介紹和討論,以及相應的設計實現(xiàn)。
元數(shù)據(jù),英文中表示為Metadata,主要用來表述數(shù)據(jù)的屬性、結構和內容間的關系信息。在面向對象的程序設計范疇,元數(shù)據(jù)被解釋為:不能進行結構變更,只能通過改變賦值來變更程序行為的數(shù)據(jù)。在程序中元數(shù)據(jù)始終值用來解釋程序的行為,而且通過對不定位置的元素進行不同賦值還可以等價原程序行為[1]。
MVC 模式是軟件工程中的一種軟件框架模式,它把軟件系統(tǒng)分為模型(Model),視圖(View)和控制器(Control)三個基本部分[2]。用一種業(yè)務邏輯、數(shù)據(jù)、界面顯示分離的方法組織代碼,將業(yè)務邏輯聚集到一個部件里面,在改進和個性化定制界面及用戶交互的同時,不需要重新編寫業(yè)務邏輯。此模式通過對復雜度的簡化,使程序結構更加直觀。
MVC 模式中的模型用于處理應用程序中的數(shù)據(jù)邏輯部分,應用程序中的數(shù)據(jù)一般包括業(yè)務數(shù)據(jù)和業(yè)務規(guī)則兩部分,對于小規(guī)模的程序和業(yè)務邏輯比較明確的應用程序,可以采用元數(shù)據(jù)對業(yè)務數(shù)據(jù)和業(yè)務規(guī)則進行描述,如圖1所示,具體的步驟是:
(1)通過對數(shù)據(jù)邏輯進行分類,找到同類的數(shù)據(jù)。
(2)對同類的數(shù)據(jù)進行抽象、建模,采用元數(shù)據(jù)的形式對該模型進行描述,形成統(tǒng)一的自描述的結構體。
(3)利用該統(tǒng)一的結構體,對不同的數(shù)據(jù)類型進行實例化,使每類數(shù)據(jù)都有一條對應的元數(shù)據(jù)描述。
同樣對于視圖(View)中的同類顯示元素也可以抽象成統(tǒng)一的結構體,并用元數(shù)據(jù)進行描述。在模型數(shù)據(jù)和視圖數(shù)據(jù)都可以被元數(shù)據(jù)描述后,再將兩者間的關系也用元數(shù)據(jù)映射進行描述,比如將某類數(shù)據(jù)中的某段數(shù)據(jù)映射到某類視圖中的某個元素進行顯示,這種多對多的映射可以滿足各類模型數(shù)據(jù)的可視化需求。
圖1:使用元數(shù)據(jù)對模型建模的步驟
MVC 模式將視圖層和數(shù)據(jù)層分離,原本就具備耦合性低,重用性高,部署快,維護性高成本低等優(yōu)點,但同時也存在一些不足,比如增加系統(tǒng)結構和實現(xiàn)的復雜性,將花費大量時間將MVC 模式應用到小型、中等規(guī)模的應用程序通常會得不償失。但從另一個角度分析,正是因為小型、中等規(guī)模的應用程序業(yè)務邏輯較清晰,適合運用元數(shù)據(jù)技術對業(yè)務規(guī)則和顯示邏輯進行建模,實現(xiàn)一套數(shù)據(jù)驅動的應用程序,最大化應用程序的重用性,從而彌補采用MVC模式造成較高成本的缺陷。
機內測試,簡稱BIT(Built-In-Test),是提高電路系統(tǒng)可測試性而提高系統(tǒng)工作可靠性,減少系統(tǒng)維護費用的關鍵技術[3]。相對于復雜的大系統(tǒng),BIT 檢測系統(tǒng)可以算是一個中小型系統(tǒng),而BIT 可視化則是其中一個重要的組成部分,優(yōu)秀的BIT 可視化設計可以提高診斷能力,簡化設備維修,提高維修性,降低總體費用,延長產(chǎn)品的壽命。
優(yōu)秀的BIT 可視化設計包括以下幾個方面:
(1)采用豐富的展示形式,使用狀態(tài)燈,狀態(tài)框圖,按鈕,狀態(tài)圖片等狀態(tài)元素,給用戶更直觀地展示元件的狀態(tài)。
(2)采用多層級的展示方式,按照如設備級,機柜級,板卡級等多層級的展示方式,使用戶可以更便捷地在各級間進行切換。同時盡量展示形式盡量設備內的真實布局,也可以使用戶對設備的布局結構有更深入的了解,也能更快速地定位問題。
表1:自定義插件功能表
(3)采用界面和數(shù)據(jù)分離的設計原則,開發(fā)一套可擴展的BIT 可視化程序框架,定義好BIT 可視化的流程和設計規(guī)范,后續(xù)開發(fā)者可以在這套框架上自由的設計和組合BIT 界面。
在基于元數(shù)據(jù)的MVC模型實現(xiàn)技術上采用QT平臺進行開發(fā),首先QT 不光提供了一套控件方便開發(fā)者設計出一套精美的用戶界面。還構建了一套支持擴展QT 設計器的插件架構,以及相關的QtDesigner 模塊用于創(chuàng)建可以加載到設計器中的自定義插件,以及相關用于訪問設計器功能的類。
QT 的顯示框架包括了三個重要的部件:用戶界面文件,界面生成引擎,界面設計器,這三個部件,可以很方便的對BIT 界面進行設計,ui 文件作為BIT 界面的顯示模板,在運行時可以根據(jù)不同的數(shù)據(jù)顯示相應的BIT 狀態(tài)。
2.3.1 整體框架
在BIT 可視化程序的框架設計中采用MVC 模式進行框架設計,分為Model,View,Controller 三個層次組成,Model 層負責維護BIT 可視化程序的數(shù)據(jù)結構,并提供數(shù)據(jù)的存儲和查詢功能,包含MsgModel,PageModel 和Service 三個類。View 層負責維護每個BIT 可視化頁面,包含Page 和UIContainManager 兩個類。Control層負責聯(lián)系Model 和View 層,提供不同BIT 頁間的導航以及各種事件的響應功能,包含Router 類。
2.3.2 Model 層
Model 層根據(jù)報文,將設備不同層級的BIT 數(shù)據(jù)映射為Message 數(shù)據(jù)結構。對外通過Service 類提供數(shù)據(jù),Service 類提供獲取每個Message 中數(shù)據(jù)項的接口,并提供標準的數(shù)據(jù)變化通知消息。
Model 層中提供MsgModel 類作為對BIT 數(shù)據(jù)的元數(shù)據(jù)管理類,它使用XML 進行元數(shù)據(jù)的配置,包含報文名稱,字段名稱,是否Bit,字段大小,字段默認值等屬性。
Model 層在提供PageModel 類,用于管理BIT 數(shù)據(jù)和界面(Page)間的元數(shù)據(jù)映射,它對應的元數(shù)據(jù)映射配置文件格式,包含:頁面名稱,控件名稱,控件屬性,報文名稱,報文字段等屬性。
Model 層中提供RulerModel 類用于配置各報文中的固定字段,輔助BIT 程序過濾出具體的報文。
最后Model 層通過Service 類完成對以上三個類的管理,并對外提供對內部BIT 數(shù)據(jù)的存儲功能。
2.3.3 View 層
View 層中每個QWidget 界面都是一個容器,通過QT 的界面生成引擎生成,根據(jù)界面配置ui 文件生成具體的頁面,包含設計頁面的相關控件,并對每個元素包含相關的屬性,并能夠響應具體的事件。Page 類主要記錄QWiget 中沒有BIT 可視化元素的索引,以方便對其進行查詢和賦值。UiContainManager 類則通過名稱記錄了Page 的索引,以方便管理Page 集合。
UIContainManager 類負責加載每個ui 文件,生成對應的頁面,并對頁面中需要動態(tài)設置的控件建立索引,具體的加載流程為首先讀取ui 文件夾文件,將每個ui 文件依次生成對應的Page,并對Page 中的控件書進行索引,記錄導航、板塊狀態(tài)、狀態(tài)燈以及狀態(tài)圖片插件的索引。
View 層中的自定義插件主要分為四種,對應的功能如表1所示。
2.3.4 Control 層
Control 層通過Router 類進行管理,通過對Model 和View 層的功能調用,提供不同BIT 頁間的導航以及各種事件的響應功能。
當加載一個頁面時,先對頁面上的導航插件進行事件綁定,注冊它們的點擊事件,然后根據(jù)pageModel 中的映射關系,將數(shù)據(jù)更新到page 中,并激活對應的page 進行顯示。
使用基于元數(shù)據(jù)的MVC 模型設計的BIT 可視化模塊,為BIT檢測提供了更靈活的BIT 界面布局和豐富的設計元素,極大的擴充了BIT 可視化的能力。同時基于QT 功能提供的BIT 可視化功能設計,實現(xiàn)了界面和業(yè)務邏輯的分離,為用戶行為設計師和開發(fā)人員并行工作提供了可能,為BIT 可視化模塊的模塊化,通用化提供了重要支撐。