《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > 基于數(shù)據(jù)驅(qū)動的圖形界面開發(fā)方案
基于數(shù)據(jù)驅(qū)動的圖形界面開發(fā)方案
來源:微型機與應(yīng)用2013年第19期
彭順順,周傳生
(沈陽師范大學(xué) 軟件學(xué)院,遼寧 沈陽 110034)
摘要: 基于數(shù)據(jù)驅(qū)動方法的圖形界面開發(fā)方案以界面控件為對象,使用圖形界面配置數(shù)據(jù)描述功能邏輯,通過圖形界面配置數(shù)據(jù)的變動驅(qū)使系統(tǒng)的運行,實現(xiàn)功能邏輯。實現(xiàn)了圖形界面配置數(shù)據(jù)和功能邏輯的分離,當需求發(fā)生變動時,只需要修改圖形界面配置數(shù)據(jù),功能邏輯即可實現(xiàn)。這不僅提高了圖形界面的復(fù)用性,還降低了后期維護成本。
Abstract:
Key words :

摘  要: 基于數(shù)據(jù)驅(qū)動方法的圖形界面開發(fā)方案以界面控件為對象,使用圖形界面配置數(shù)據(jù)描述功能邏輯,通過圖形界面配置數(shù)據(jù)的變動驅(qū)使系統(tǒng)的運行,實現(xiàn)功能邏輯。實現(xiàn)了圖形界面配置數(shù)據(jù)和功能邏輯的分離,當需求發(fā)生變動時,只需要修改圖形界面配置數(shù)據(jù),功能邏輯即可實現(xiàn)。這不僅提高了圖形界面的復(fù)用性,還降低了后期維護成本。
關(guān)鍵詞: 圖形界面;數(shù)據(jù)驅(qū)動;配置數(shù)據(jù);功能邏輯;重復(fù)利用性

 圖形界面是連接用戶和計算機的紐帶,用戶不僅要求圖形界面功能豐富、操作簡單,還在感官層次上要求操作的舒適感和愉快感[1],因此,在較短時間內(nèi)開發(fā)出滿足用戶需求的圖形界面成為企業(yè)競爭的焦點。目前,圖形界面的開發(fā)是在集成開發(fā)環(huán)境下采用某種編程語言編寫功能代碼實現(xiàn)的[2]。這種開發(fā)方式存在以下問題:(1)圖形界面與功能代碼的高耦合[3],圖形界面需求的改變會導(dǎo)致功能代碼重復(fù)繁瑣的修改,影響了開發(fā)效率,延遲軟件發(fā)布時間;(2)圖形界面重復(fù)利用性差[4],已經(jīng)發(fā)布的圖形界面不能被其他軟件使用,即使是功能相似的軟件,圖形界面的重復(fù)使用也會導(dǎo)致開發(fā)人員根據(jù)客戶的需求重新設(shè)定圖形界面的布局和控件的功能,增加了開發(fā)人員的勞動量[5]。
 隨著數(shù)據(jù)庫的潛力被無限發(fā)掘,越來越多的軟件以數(shù)據(jù)為中心完成更多的任務(wù),進入了數(shù)據(jù)驅(qū)動時代[6-7]。數(shù)據(jù)驅(qū)動方法借助數(shù)據(jù)交換工具(例如XML)以數(shù)據(jù)為中心,根據(jù)數(shù)據(jù)的變動推動系統(tǒng)的運行[8-9]。數(shù)據(jù)驅(qū)動方法已經(jīng)應(yīng)用到軟件測試的設(shè)計中,這種方法使測試腳本和測試數(shù)據(jù)分離,通過測試數(shù)據(jù)的變動驅(qū)使測試的運行,有效地縮短了軟件開發(fā)周期,減少了開發(fā)人員的勞動量。
為解決圖形界面開發(fā)存在的問題,把開發(fā)人員從繁瑣的編碼中解放出來,提出了基于數(shù)據(jù)驅(qū)動的圖形界面開發(fā)方案。開發(fā)方案以XML形式描述圖形界面的信息,根據(jù)XML提供的數(shù)據(jù)對界面控件進行布局和響應(yīng),組裝滿足需求的圖形界面。
1 開發(fā)方案
1.1 開發(fā)流程

 基于數(shù)據(jù)驅(qū)動的圖形界面開發(fā)方案是以界面控件為對象,使用XML描述圖形界面信息,由一個可重復(fù)利用的開發(fā)平臺對圖形界面數(shù)據(jù)進行轉(zhuǎn)換、提取、分析、處理等操作,推動系統(tǒng)的運行,從而實現(xiàn)描述的功能。
根據(jù)數(shù)據(jù)驅(qū)動的原理,基于數(shù)據(jù)驅(qū)動的圖形界面開發(fā)方案有以下幾個步驟:
?。?)根據(jù)圖形界面的動態(tài)需求,基于數(shù)據(jù)驅(qū)動的圖形界面開發(fā)方案利用現(xiàn)有的界面轉(zhuǎn)換工具把圖形界面控件信息編寫到圖形界面文件中,圖形界面文件以XML形式描述;
 (2)綜合、抽象圖形界面控件信息,根據(jù)圖形界面控件信息初始化界面控件庫;
?。?)讀取并分析圖形界面文件中界面控件的外觀、布局、行為等數(shù)據(jù);
 (4)根據(jù)獲得的數(shù)據(jù),調(diào)用界面控件庫里的控件,設(shè)計圖形界面控件的功能和布局,組合圖形界面。
1.2 功能模塊
 從基于數(shù)據(jù)驅(qū)動的圖形界面開發(fā)方案的步驟可以看出,基于數(shù)據(jù)驅(qū)動的圖形界面開發(fā)方案由界面規(guī)范、功能界面、界面轉(zhuǎn)換工具、圖形界面文件、界面控件庫、數(shù)據(jù)處理模塊、運行環(huán)境幾個模塊組成,如圖1所示。

 界面規(guī)范是描述操作的規(guī)定和要求,對界面輸入、界面信息轉(zhuǎn)換、界面數(shù)據(jù)的處理和界面布局等操作具有指導(dǎo)作用。
 功能界面是由多個簡單的界面控件組成,每個界面控件都有其基本屬性。界面控件的屬性包括大小、顏色、位置、字體類型等,這些屬性可以是靜態(tài)的,也可以是動態(tài)的,體現(xiàn)了界面控件的外觀、布局和行為。
界面轉(zhuǎn)換工具根據(jù)功能界面提供的信息編寫圖形界面文件。
 圖形界面文件是用來描述圖形界面信息的,包括圖形界面基本信息和界面控件信息,其文件結(jié)構(gòu)如圖2所示。

 數(shù)據(jù)處理模塊負責(zé)圖形界面信息的讀取、分析和顯示。以下是數(shù)據(jù)處理模塊完成的主要操作:
?。?)采用工廠模式獲取DOM解析器,這種模式將應(yīng)用程序代碼和DOM解析器徹底分離開來,實現(xiàn)更好的解耦;
?。?)DOM解析器解析描述圖形界面信息的XML文檔,獲取界面控件信息,并按照一定的機制將界面控件信息放入到迭代器中;
?。?)數(shù)據(jù)處理模塊識別界面控件信息,為了更好地識別界面控件類型,定義了界面控件庫;
?。?)當系統(tǒng)運行時,數(shù)據(jù)處理模塊依次從迭代器中獲得界面控件信息,根據(jù)界面控件信息設(shè)定界面控件的顏色、大小、位置等屬性,形成圖形界面。
界面控件庫封裝了控件集和圖形庫,在構(gòu)造界面控件庫時,首先分析界面控件的外觀、功能等信息,抽象分離這些信息找出類似點,根據(jù)類似點將界面控件分類;其次對每類的界面控件來說,將界面控件具有的共同信息以編碼形式保存下來,初始化界面控件庫,通過編程語言的繼承方式保存界面控件的共性;最后,設(shè)定界面控件信息的接口,當數(shù)據(jù)處理模塊識別界面控件并對界面控件設(shè)定時,能保證界面控件之間的無縫連接,不需要重新設(shè)定界面控件信息。
 基于數(shù)據(jù)驅(qū)動的圖形界面開發(fā)方案將圖形界面信息封裝到XML描述文件中,把處理XML描述文件的操作以代碼形式顯示出來,這樣不僅使圖形界面與功能代碼分離,便于圖形界面的維護,還提高了圖形界面的重復(fù)利用性。當需求發(fā)生變化時,圖形界面文件隨之發(fā)生改變,數(shù)據(jù)處理模塊會重新處理圖形界面數(shù)據(jù),從而實現(xiàn)圖形界面的功能,不需要手動修改功能代碼。這種方法使開發(fā)人員的主要精力放在了數(shù)據(jù)的獲取和分析上,減少了開發(fā)人員的勞動量,提高了開發(fā)效率。由于圖形界面信息是用XML描述的,便于圖形界面的擴展。
2 圖形界面的設(shè)計
2.1 圖形界面文件

 XML是一種元標記語言,使用元標記來描述數(shù)據(jù)信息,具有良好的擴展性、自我描述性和層次嵌套性。圖形界面的控件信息是多樣的,并且控件之間具有層次嵌套性,圖形界面的控件信息可用XML來描述。XML描述圖形界面文件具有以下特點:
?。?)圖形界面文件的結(jié)構(gòu)類似一棵樹,是從根元素開始構(gòu)造的;
?。?)圖形界面文件是對圖形控件的描述,如果圖形界面文件包括多個圖形控件,就要對多個圖形控件進行描述;
 (3)圖形控件的信息封裝在一個自定義的標簽內(nèi),在這個自定義的標簽內(nèi),可以定義圖形控件的類型、名稱、外觀、功能等子標簽;
 (4)圖形界面文件不僅顯示了界面控件的信息,還要顯示界面控件之間的關(guān)系,以及定義界面控件響應(yīng)的對象。
 下面的XML文檔是對按鈕和標簽的描述:
 <?xml version=′1.0′ encoding=′gb2312′?>
 <page>
  <window>
    <window_title>圖形界面</window_title>
    <window_visible>true</window_visible>
    <window_bounds>
      <window_height>300</window_height>
      <window_width>100</window_width>
      <window_LocationX>100</window_LocationX>
      <window_LocationY>100</window_LocationY>
      </window_bounds>
      ……
      <window_action>action.WindowAction
      </window_action>
    </window>
    <component type=”button”>
      <button_text>修改</button_text>
      <button_height>5</button_height>
      <button_width>10</button_width>
<button_background>red
      </button_background>
      …….
      <button_action>action.ButtonAction
      </button_action>
    </component>
    <component type=”label”>
      <label_text>圖標</label_text>
      <label_icon>images/1.png</lable_icon>
      <label_locationX>10</label_locationX>
      <label_locationY>10</label_locationY>
      ……
      <label_action>action.LabelAction
      </label_action>
    </component>
  </page>
2.2 數(shù)據(jù)處理模塊

 


 處理圖形界面信息時,數(shù)據(jù)處理模塊要解析XML圖形界面文件,DOM(文檔對象模型)定義了訪問和操作XML圖形界面文檔的方式。獲取DOM解析器并解析XML圖形界面文件的步驟如下:
 (1)調(diào)用DOM解析器工廠類的newInstance()方法獲取解析器工廠對象;
 (2)調(diào)用DOM解析器工廠的newDocumentBuilder()方法獲取DOM解析器,將XML數(shù)據(jù)轉(zhuǎn)換為常駐內(nèi)存的樹狀結(jié)構(gòu);
?。?)將XML文檔解析成Document對象,讀取XML圖形界面文件里的數(shù)據(jù);
 (4)根據(jù)getDocumentElement()方法獲得XML文件的根節(jié)點;
 (5)根據(jù)樹狀結(jié)構(gòu)的層次嵌套結(jié)構(gòu),結(jié)合遞歸方式依次建立節(jié)點對象,并將節(jié)點對象存放在迭代器內(nèi);
?。?)通過循環(huán)方式訪問節(jié)點對象,獲得節(jié)點數(shù)據(jù),即界面控件屬性。
 DOM解析XML圖形界面文件流程圖如圖3所示,得到界面控件信息后,數(shù)據(jù)處理模塊根據(jù)界面控件信息判斷界面控件類型,為界面控件創(chuàng)建界面控件對象,通過界面控件對象把界面控件信息設(shè)置到功能代碼中,運行功能代碼,實現(xiàn)圖形界面。

2.3 界面控件類

 


 界面控件庫是由描述界面控件外觀、類型、行為等的界面控件和管理這些界面控件的控件組成。界面控件的外觀決定了圖形界面帶給用戶的愉悅感和可操作性,界面控件的類型決定了圖形界面功能的多樣性,界面控件的行為決定了圖形界面的動態(tài)響應(yīng),圖形界面不僅僅是靜態(tài)的,也可以是動態(tài)的,例如:鼠標在按鈕上時,按鈕的顏色是紅色的,鼠標離開按鈕后,按鈕的顏色就是藍色的。
 圖形界面的控件無非是窗體、面板、標簽控件與圖標、按鈕控件、文本控件、列表控件、進度條等類型,界面控件的屬性也就是name、text、size、height、width等性質(zhì),界面控件庫可以包括這些基本信息。構(gòu)造界面控件庫的步驟如下:
?。?)為圖形界面的每種類型的界面控件創(chuàng)建一個類,并且設(shè)置這些類繼承的基類,將這些類放到一個文件夾中;
?。?)在類的函數(shù)中添加相應(yīng)的響應(yīng)事件,例如鍵盤,keyPressed()是鍵盤上按鍵按下時觸發(fā)的事件,keyReleased()是鍵盤上按鍵釋放時觸發(fā)的事件。
 當應(yīng)用程序運行時,數(shù)據(jù)處理模塊讀取圖形界面文件的數(shù)據(jù),通過反射機制調(diào)用界面控件庫中的組件,設(shè)置組件的屬性,完成圖形界面的開發(fā)。
 圖形界面開發(fā)已經(jīng)成為軟件開發(fā)的重要組成部分,對于目前圖形界面開發(fā)存在的問題,如何提高圖形界面重用性和降低圖形界面與功能代碼的耦合度對于企業(yè)很重要?;跀?shù)據(jù)驅(qū)動的圖形界面開發(fā)方案將界面控件信息以XML文件形式描述,圍繞對界面控件信息的解析、處理等操作驅(qū)使系統(tǒng)運行。這種方式實現(xiàn)了以數(shù)據(jù)驅(qū)動軟件運行,數(shù)據(jù)與功能代碼的分離,當需求發(fā)生變化時,不需要修改源代碼,減小了開發(fā)人員的勞動量。同時,XML具有較高的擴展性,用XML描述圖形界面信息,便于后期的擴展。
參考文獻
[1] 言金剛,樊東平,劉又誠.基于XML的統(tǒng)一用戶界面描述[J].計算機工程,2002,28(6):83-85.
[2] 杭欣靜,蔣澤軍,王麗芳.基于XML的用戶界面動態(tài)生成框架的設(shè)計與實現(xiàn)[J].科學(xué)技術(shù)與工程,2009,9(9):2492-2495.
[3] 張敦華.一種界面自動生成技術(shù)[J].計算機與數(shù)字工程,2004,32(5):20-24.
[4] 李松.一種人機界面動態(tài)調(diào)度技術(shù)[J].微處理機,2012,33(1):63-66.
[5] 靳京,桑楠,劉一.基于XML的嵌入式Linux系統(tǒng)用戶界面定制[J].電子科技大學(xué)學(xué)報,2007,36(3):510-513.
[6] 侯忠生,許建新.數(shù)據(jù)驅(qū)動控制理論及方法的回顧和展望[J].自動化學(xué)報,2009,35(6):650-667.
[7] REDMOND M, BAVEJA A. A data-driven software tool for enabling cooperative information sharing among police departments[J]. European Journal of Operational Research, 2002,141(3):660-678.
[8] 梁瑋.數(shù)據(jù)驅(qū)動設(shè)計模式的研究及在OTA開發(fā)工具中的應(yīng)用[D].北京:北京郵電大學(xué),2009.
[9] 徐陋.數(shù)據(jù)驅(qū)動設(shè)計模式的研究及應(yīng)用[D].廣州:暨南大學(xué),2006.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。