摘要:傳統桌面軟件的GUI(Graphic User Interface)實現方式缺乏類似HTML模式的“頁面描述機制”,這個弊端導致大量冗余工作的出現。而且軟件GUI的運行時動態創建也存在問題。針對這些缺陷,該文提出了基于XML的圖形用戶界面的表達描述和實現,在這種方式下的GUI與軟件屬于無耦合方式,從而從根本上解決了跨平臺的問題。另外,這種方式下GUI可以與插件系統進行對接,為界面的構件化提供了可能。
關鍵詞:XML;桌面軟件;GUI;構件
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2008)27-1962-04
Design and Application of Desktop Software's GUI Based on XML
LI Chu
(Wuhan Maritime Communication Research Institute,Wuhan 430079,China)
Abstract:The implementation of the traditional desktop software's GUI (Graphic User Interface) lacks the way of \"the page description mechanism\" that similar HTML mode, this abuse cause a great deal of emergence that the redundancy work. And the dynamic establish in the runtime of the software GUI also exist a problem. Aim at these problems, this paper provides the expression description and realization of GUI based on XML,in this way the coupling of GUI and software is incompact, thus resolving the problem of the cross-platform and by the root. Moreover, under this kind of way the GUI can carry on with the plug-in system and provide a possibility for the component of the interface.
Key words:XML;desktop software;GUI;component
1 引言
隨著信息時代的發展,計算機軟件的需求越來越復雜,規模越來越大,而且隨著企業的發展和業務的擴展,需求變化是不可避免的。目前,大多數軟件系統的界面、功能都是固定編碼的,如果需求發生了變化,則必須修改源代碼,然后將程序重新編譯。需求變化中的很大一部分是類似但又十分瑣碎的,然而,軟件的開發人員的流動性很大,加上開發文檔的缺乏,導致這種需求變化很難得到快速的滿足。據統計,在一個應用程序中平均48%的代碼用于用戶界面,大約50%的執行時間用于執行用戶界面程序[1]。隨著軟件系統規模的不斷擴大,開發用戶界面所耗費的時間和成本也將成倍增加[2],因此,怎樣在較短的時間內設計出符合用戶要求的用戶界面,提高用戶界面的開發效率,無疑是應用程序必須急待解決的一個問題。為此本文提出了一種基于XML 的用戶界面實現方法。
2 傳統桌面軟件圖形用戶界面實現的優勢與弊端
2.1 Web軟件的優勢
毋庸置疑,Web軟件的動態性、易于部署和表現力豐富等等關鍵特征奠定了這類軟件在現代軟件應用中的優勢,隨著應用的積累,Web軟件的聚合效應也日漸凸顯,許多大型的門戶已經開始基于這種聚合效應構建未來的軟件服務模式。就軟件的發展趨勢而言,由于用戶的硬件環境越來越強大、成本越來越低,因此,未來在用戶的桌面上運行的不應該僅僅是基于HTML的輕量級的應用,但就今天的技術而言,人們還不能像編寫HTML那樣編寫桌面特征的軟件,因此,一個關鍵的問題浮現了,那就是如何架構一種軟件開發模式,即可以發揮桌面軟件的技術優勢,又能夠很好的體現Web軟件的優勢,同時也可以充分發揮Web服務器的威力、技術儲備效應。通過將大量的框架性質的代碼歸結為XML描述,可以使桌面軟件開發向著“頁面化”的方向前進。
2.2 桌面軟件的優勢
顯然,盡管Web軟件有豐富的表現力,但更豐富的用戶體驗還是桌面軟件體現的,因此,在交互性以及業務密集型的應用之中,桌面軟件依然占據主流。由于需要本機安裝,因此,桌面軟件的部署是一個關鍵問題。
2.3 桌面軟件圖形用戶界面實現的弊端
大量的軟件組件積累來自于傳統的軟件開發技術,當我們面對一個功能有限、擴展性要求不高的軟件需求時,傳統的技術模式不會有所謂的“劣勢”,傳統的軟件技術特別適合開發那些功能描述相對確定的、作用域不是很寬、大的軟件系統,或一個功能局限的局部系統。從許多方面看,大量的功能具體的組件,都是基于傳統的技術框架實現的,類似HTML等技術,往往是起到一個對傳統技術組件“組織”的作用,從許多方面看,桌面軟件的體驗,對具體的用戶而言還是非常重要的,因此,類似HTML之類的技術不能解決軟件的全部問題,許多應用還需要桌面體驗很強的軟件進行支撐。但當一個系統出現功能擴展方面的需求的時候,問題就出來了,在Web領域,對一個Web應用的各種考慮,大體是一致的標準思考方式,然而對桌面開發而言,卻受制于團隊的技術積累等多方面因素。是否存在類似于Web方式的軟件描述技術來改變現在的大型桌面軟件的“僵化”狀態呢? [3]
1) 桌面軟件缺乏類似于HTML模式的“頁面描述機制”,這是傳統桌面軟件開發最顯而易見的弊端,這個弊端導致大量的冗余工作的出現,例如,在MFC開發中,針對不同的CMainFrame框架,我們往往必須對應不同的C++工程以解決CMainFrame的具體的表現形態,對VB6、Delphi以及.NET桌面開發都存在類似的冗余勞動;
2) 傳統軟件開發模式的第二個弊端是不能為桌面軟件提供一個通用的“腳本”引擎以及UI引擎使得軟件可以根據不同的情況形成不同的方案。這一點與Web開發也形成鮮明的對比;
3) 傳統模式的第三個弊端是,通常情況下,對系統的擴展依賴于軟件框架的源代碼,盡管有“plug-in”概念,但這類概念的實現依賴于軟件的技術積累,Plug-in不是通用的行為,而是“個案”。對大多數軟件而言,缺乏編譯后的擴展、二次開發功能,許多功能的體驗完全取決于開發環節的工作,一旦開發結束,用戶級別的擴展、二次開發等難度較大,成為軟件適應用戶不斷增長的需求的關鍵障礙;
4) 傳統桌面軟件開發模式的第四個弊端是缺乏與Web技術的結合模式。
2.4 結合Web軟件和桌面軟件的必要性
現代軟件發展的趨勢是軟件的服務必將替代軟件銷售。因此,軟件發布、獲取的模式正在日漸改變,隨著桌面軟件逐漸吸收Web軟件的優點。最終,Web軟件與桌面軟件之間的差別會變得非常模糊。
桌面軟件開發Web化的設想是將支撐功能組合的XML段落自然的寫在HTML頁面之中,不必進行那些重量級的編碼,一樣可以獲得相同體驗的GUI形式,這一點客觀上將導致桌面系統構造工程的Web化。同時,開發者獲得足夠的時間去考慮如何形成功能更加強大的軟件組合形式,如同網站聚合Web內容一樣,這種變遷一定會發生在桌面開發過程之中。GUI頁面化,不僅僅簡化了軟件的開發環節,同時也給軟件部署的環節帶來新的變化,那就是開發者可以利用成熟的HTTP協議部署、發布桌面軟件功能了,這樣考慮的優勢是優秀技術的自然結合,而不是一種嚴酷的淘汰。面對大量的桌面組件的積累,更科學的考慮是如何結合現有的技術充分的利用這些積累。
3 XML元素
由于用戶界面主要是由窗口、對話框和各種控件組成,用戶操作界面是由事件驅動的, 因此我們不僅定義了界面元素,同時還定義了對應元素的事件和動作,加入了邏輯結構的判斷語句。在XML 規范的基礎上定義了針對界面元素的所需要的特定XML 元素、元素的屬性以及元素和元素的屬性之間的關系;其具體格式規范如下所介紹。
1) <Application>元素表示一個應用程序,所有的界面元素都包含在<Application>-- </Application>中;
2) <Form>元素表示一個窗體,它有ID 和Name 屬性,其中ID 表示窗體號, Name 表示窗體名稱;
3) <Components>元素表示控件的集合,它包含所有的<Component>元素;
4) <Component>元素表示在窗體中出現和使用的控件,它有id、type、name、posX、posY、width、height 和text 屬性。其中id表示控件號, type 表示控件的類型,name 表示控件的名稱,posX表示控件的x 軸坐標,posY 表示控件的y 軸坐標,width 表示控件的寬度, height 表示控件的高度,text 表示控件中包含的文本。
5) <Events>元素表示事件的集合,它包含所有的<Event>元素;
6) <Event>元素表示事件,它有id、name 和type。其中id 表示事件號,name 表示事件的名稱, type 表示事件的類型;
7) <Actions>元素表示動作的集合,它包含所有的<Action>元素;
8) <Action>元素表示動作,它有id 和表示動作的名稱。其中id 表示動作號,name 表示動作的名稱;
9) <if>元素表示判斷語句,它包含<elseif>和<else>元素,它的cond (條件)屬性表示一個條件表達式,它的值可以是true 或1。如果cond 的屬性的值計算為true,那么封裝在<if>或者<elseif>元素中的指令將被執行。如果cond 屬性的值計算為1,便訪問下一個<elseif>或<else>;
10) <Vars>元素表示變量的集合,它包含所有的<Var>元素;
11) <Var>元素表示定義一個變量,它有type、name 和value屬性,其中type 表示變量的類型,name 表示變量名,value 表示變量的值;
12) <Assign>元素表示對一個變量進行賦值,它有name 和value 屬性,其中name 表示需要賦值的變量名,value 表示需要給變量賦的值。
4 基于XML的圖形用戶界面GUI的表達描述
4.1 基于XML的圖形用戶界面表達描述的特點
可擴展標記語言( eXtensible Markup Language,XML)是由互聯網聯合組織(World Wide Web Consortium,W3C)在1998 年制定的一種通用語言規范,它是一門新興的、面向Internet 應用的標記語言。采用基于XML 的界面描述可以將界面元素(如按鈕、樹、文本框等) 定義為XML 的標簽( Tag),可方便地將界面元素的屬性(標題、位置、大小等)、事件、方法以及相關信息寫入XML 文件中,此XML 文件即定義了相應的用戶界面。采用基于XML 用戶界面描述是基于以下的考慮[4]:
1) XML 采用樹狀存儲格式,可以實現對界面信息的快速查詢和數據提取;
2) XML 具有良好的擴展性和自描述性,適合對界面元素進行描述;
3) XML 的數據內容(DI)與描述數據顯示方式(XSL)的信息相分離,可以動態地改變資源文件或結合其他標準,從而改變應用程序的風格和外觀;
4) XML 具有語言無關性并有眾多的支持工具,可實現跨平臺異構應用程序之間的界面信息共享;
5) XML 提供了對多語種的支持,包括UTF27、UTF28、UNICODE、GB2312 (簡體中文)、BIG5 (繁體中文)等,容易實現軟件的國際化和本地化。
4.2 用戶界面的XML描述
由于目前正處于第二代圖形用戶界面時代,而且大部分商業MIS 系統都是WIMP (Window 窗口、Icon 圖標、Menu 菜單和Pointing Device 指點設備)風格的界面,因此將用前面介紹的XML 元素進行界面格式的具體描述。
1) 用戶界面的層次結構描述
<?xml version=\"1.0\" encoding=\"gb2312\"?>
<Application><! - - 應用程序- - >
<Form><! - - 窗體- - >
<Vars><! - - 變量列表- - ><Var>
......</Vars>
<Components><! - - 控件列表- - >
<Component>
</Component>
......</Components>
<Actions><! - - 動作列表- - >
<Action></Action>......</Actions></Form>
</Application>
2) 變量的描述
<var type='Button' name='MyButton' value='' />
3) 控件的描述
<Components>
<! - - 按鈕控件的定義- - >
<Component id=\"1001\" type=\"appliction.component.Button\" name=\"Button\">
<Button width =\"75\" height=\"23\" posX =\"224\" posY=\"368\" name=\"add\" text=\"添加\" >
<! - - 事件的定義- - >
<Events id=\"100101\"type = \"click\" name= \"addNode\" />
</Button>
.......
</Component>
.......
</Components>
4) 動作的描述
<Actions>
<Action id=\"10011\" name='TreeHandle'>
<if cond="cmd=Tree_loadXML" > <! - - 加載XML 文件- - >
<Tree_loadXML var1="load_xml_file" />
<elseif cond="cmd=Tree_AddNode" >
<Tree_AddNode var1="N_Add_PNode"/>
<assign name='cmd' value='Tree_loadXML' /> <assign name ='NodeP' value=' ' />
</Tree_AddNode>
</elseif>
</if>
</Action>
.......
</Actions>
5 應用實例
5.1 系統概述
以某軍事項目文件規劃系統為例。該系統根據用戶需求科學有效地規劃配置文件,輔助決策。由于用戶的工作及所在部門職能不同,其功能和訪問資源也不盡相同。用戶需求變動要求界面生成能適應數據庫結構變化。因此采用模塊化的組件技術和基于XML 配置管理,實現數據層與表示層信息分離,系統在修改功能或數據結構時,只需調整相應功能模塊或修改配置文件即可。
5.2 界面自動生成
此軍事項目文件規劃系統的菜單和按鈕響應界面等是按不同的應用需求動態生成。以顯示文件規劃信息為例,界面動態生成模塊需知道界面表示層信息(如動態生成控件名稱)和數據層信息(如數據類型、具體值等)。前者存儲在XML 文件中,后者由數據庫中讀取。界面動態生成流程如圖1所示。
按用戶操作獲取顯示文件規劃信息的主鍵值,其次從XML 配置文件中讀取界面表示層信息(顯示項名稱、查詢表名、主鍵名等),再用SQL 語句讀取數據庫中數據層信息(字段類型、長度、是否非空和具體值等)保存在結構類型struColInfo 中,運行時循環生成界面元素,按顯示字段類型的不同生成文本框、選擇框或日期控件,并填充文件規劃信息,最后添加按鈕和功能處理函數。當添加數據庫字段時,只修改XML 文件即可生成新的界面。
最后產生的界面如圖2 所示。
6 小結
通過將桌面軟件的架構模式與Web軟件開發模式相結合,充分發揚了軟件結構應該體現的可描述性、動態性、可擴展性等優秀特征,有效的避開了傳統桌面軟件開發過程中的許多冗余工作,使得個性和共性之間能夠充分的結合。本文提出了基于XML 的圖形用戶界面的表達描述并應用到具體實例中。由于XML 是一種自解釋、自描述的語言,這樣基于XML 的用戶界面不會依賴其所在的系統。所以它與后臺系統之間完全屬于無耦合方式,這樣,就根本的解決了跨平臺的問題。另外,將用戶界面的數據結構和顯示分離,從而使非常容易、快捷地實現個性化定制成為可能[5]。


參考文獻:
[1] Myers B A,Rosson M B.Survey on User Interface Programming[R].New York:ACM Press,1992.
[2] 陳效路,程景云.人機界面工具研究評述[J].計算機輔助工程,1999,(4).
[3] 徐龍杰,萬建成.基于模型的用戶界面代碼自動生成[J].計算機工程與應用,2004,(12).
[4] Natanya,著.XML技術內幕[M].北京:機械工業出版社,2002.
[5] 溫薇,曹首軍.基于XML 的無耦合圖形用戶界面GUI的表達描述[J].中國水運,2008,(1).