譚 凱 尹金玉 李亞芬
摘 要:通過對復雜的Web應用需建立恰當的模型可以對系統(tǒng)進行抽象和簡化,幫助開發(fā)者更好地理解及設計該系統(tǒng)。采用XML格式建立的平臺無關模型具有良好的適應性及擴展性,這里通過設計一個建模平臺,以JSP頁面為交互界面獲取復雜Web應用的功能需求;采用面向Java的XML解析技術輸出該Web應用的平臺無關模型信息;采用增量式開發(fā)方法能夠對不同開發(fā)階段的模型信息進行合理有效的管理,并最終引導代碼開發(fā)人員建立符合復雜Web應用功能需求的系統(tǒng)模型。實驗證明,采用這種建模方法能快速有效地建立Web應用的平臺無關模型。
關鍵詞:Web應用建模;PIM;XML解析;DOM4J;增量式開發(fā)
中圖分類號:TP311
隨著互聯(lián)網的發(fā)展,不受限于操作系統(tǒng)的跨平臺的Java語言在Web應用的開發(fā)及設計中發(fā)揮著越來越重要的作用。然而,客觀存在的交互性及功能性的要求,使得Web應用的規(guī)模和復雜度日益增加,這使得基于Java的Web應用難以開發(fā)、管理和維護。
任何較復雜的系統(tǒng)都需要經過設計和建模,建立恰當的模型可以對系統(tǒng)進行抽象和簡化,幫助開發(fā)者更好地理解系統(tǒng)。人們?yōu)榱藬[脫軟件開發(fā)時間長、成本高、生命周期短等弊病,一直以來也在不斷摸索更為完善的系統(tǒng)建模方法。從之前的瀑布式開發(fā),原型式開發(fā),到現(xiàn)在流行的面向對象建模技術,都是面對復雜應用系統(tǒng)建立模型的方法?;谀P偷腤eb應用開發(fā)方法MDA是新一代的面向對象建模技術,在該框架下,模型在整個軟件開發(fā)過程中起核心作用,這里著重于采用DOM技術建立MDA的平臺無關模型(PIM)。
1 基于MDA的Web應用建模
1.1 Web應用的建模方法
目前,功能較復雜的基于Java的Web應用系統(tǒng),其開發(fā)過程大都存在開發(fā)周期長,系統(tǒng)復雜易出錯等困難。MVC(模型[CD*2]視圖[CD*2]控制)模式解決了部分問題,但在這種傳統(tǒng)的面向對象建模方法中,由于涉及的系統(tǒng)模型及業(yè)務流程千變萬化,隨著系統(tǒng)復雜度的增加,代碼復用性及維護性受到了越來越嚴峻的挑戰(zhàn)。
MDA(模型驅動架構)是OMG(對象管理組織)提出的新的軟件開發(fā)方法學。和傳統(tǒng)的面向對象建模方法相比,MDA能夠創(chuàng)建出高度抽象的模型,這些模型能夠以獨立于實現(xiàn)的技術開發(fā)并且以標準化的方式存儲。從而,采用MDA方法建立的模型能夠從容地應對平臺和需求的變化,它提高了Web應用開發(fā)效率,增強了軟件系統(tǒng)的可移植性和可維護性。
1.2 基于MDA的平臺無關模型
模型在MDA開發(fā)過程中扮演著核心的角色,在整個軟件生命周期中得到復用[3]。平臺無關模型PIM(Platform Independent Model)是MDA中的概念,模型的平臺無關概念指的是,此模型僅包含結構信息及業(yè)務邏輯,不包含實現(xiàn)平臺的任何信息。PIM作為一個軟件模型或業(yè)務系統(tǒng),它獨立于實現(xiàn)它的特定技術平臺(例如,明確的程序設計語言,操作系統(tǒng)或數據庫)。在Web應用的建模中使用PIM的優(yōu)點是可以讓業(yè)務邏輯與實現(xiàn)方法完全分離,以便于模型的重用。在此就PIM的實現(xiàn)進行研究,也就是研究Web應用最原始的平臺無關模型,從而使建立的Web應用模型具備更強的伸縮性及可移植性。
在選擇建模語言時,必須考慮到Web應用的功能需求,建模語言必須能精確表達Web應用的功能。UML的可擴展性都是其作為PIM建模語言的優(yōu)點。但UML和MOF的不協(xié)調等也限制了UML的使用[4],而XML建模方法的無限可擴展性使得PIM模型能夠充分描述復雜的Web應用的功能及結構特性。
2 利用DOM4J建立及管理PIM模型
2.1 Java與XML的結合
XML作為一種具有通用性、良好操作性的數據交換技術,實現(xiàn)了數據和表達形式的分離,它為Web應用帶來了一種完全可移植的數據格式。由于XML文檔的內容是一種樹狀結構,結構上數據庫較為相似,因此,它為在數據庫之間交換信息提供了一種公共格式。
可以看到,XML可實施獨立于平臺的數據,Java則可實施獨立于平合的解決方案。另一方面,XML通過移植的方式表現(xiàn)數據,因此就對Java技術的可移植性構成了補充。Java和XML的天生絕配使得“一次編寫,到處運行”變?yōu)楝F(xiàn)實。在對Web應用的平臺無關模型PIM建模上,XML和Java彼此相輔相成,采用這兩項技術構建的PIM模型也將具備極好的擴展性和可移植性。
2.2 利用DOM4J開發(fā)Web應用的PIM模型
從上文的分析可以看到,與平臺無關的語言Java加上與平臺無關的數據XML,能夠完成最為復雜且彈性很好的Web應用建模。在Java中開發(fā)XML常用到幾種模型, 這些模型可以是面向對象的, 如文檔對象模型DOM,JDOM和DOM4J,也可以是面向事件的,如SAX(Simple API for XML)。其中,較為流行的就是SAX和DOM。
面向對象的文檔對象模型DOM定義了文檔的邏輯結構以及存取和維護文檔的方法。DOM主要由兩部分組成:DOM核心(DOM Core)和DOM HTML,前者主要定義了處理XML文件所需的功能,后者定義了處理HTML文件所需功能。
DOM4J(DOM For Java) 具有性能優(yōu)異、功能強大和極端易用使用的特點,它基于DOM標準,采用了㎎ava的集合框架并完全支持DOM ,SAX和JAXP,并最終成為優(yōu)秀的基于Java平臺的XML API框架。DOM4J主要的接口都在org.DOM4J包中,其中讀取和解析XML文檔主要依賴于org.DOM4J.io包,這也是采用DOM4J建立PIM模型時主要使用的包。
同樣衍生于DOM的JDOM在國內比較流行的,是使用Java平臺的XML另一解析技術,與DOM4J相比,兩者各有特點,但JDOM但豐富及強大的API也是它比JDOM更為靈活的原因。
在采用各種XML解析工具建立PIM模型的實際操作中,面向對象、衍生于DOM的DOM4J 和JDOM 內存占用都比較少。對于大型的文件,面向事件SAX處理性能較差,而JDOM 和 DOM 在測試較大的XML文檔時內存溢出[7]。在各項官方及非官方的針對XML文件解析能力的綜合測試中,DOM4J也幾乎總是拔得頭籌,因此DOM4J得到越來越廣泛的使用。例如,著名的三大框架之一的Hibernate用DOM4J來讀取XML配置文件,Sun公司的JAXM都在┦褂錨狣OM4J。
3 采用增量式開發(fā)方法進行建模實驗
[BT3]3.1 增量式開發(fā)的概念
在進行軟件設計時,由于程序開發(fā)人員和用戶在專業(yè)知識上的差距,用戶很難一開始就清楚完整地提供系統(tǒng)的需求,開發(fā)人員也很難一下子完整無誤地理解和定義用戶所提出的需求,也就是說用戶和程序員之間存在一道語義鴻溝[13]。
而在增量式開發(fā)方法中,程序員在軟件開發(fā)的各個階段并不需要交付一個完整軟件版本,而是根據此階段的用戶需求來生產滿足客戶需求的一個子集的可運行模型。整個產品被劃分為成若干個組件后,開發(fā)人員便可以逐個組件地設計及交付階段性產品,這樣做的好處是軟件開發(fā)可以較好地適應變化,某種程度上也降低了軟件的開發(fā)風險。[HJ1][HJ]
[BT(3+1]3.2 [ZK(]在Web應用PIM模型結構上應用增量式開發(fā)的具體實現(xiàn)[ZK)][BT)]
[BT4+*4]3.2.1 采用面向組件方法劃分Web應用
在Web應用的開發(fā)中,傳統(tǒng)的MVC設計模式將應用程序被分成三個核心部件:模型、視圖、控制器,它們各自處理自己的任務。但是,在Web應用的PIM模型建立中,不可能單純按照MVC三層模型的框架來建立PIM模型。MVC的分層方式過于抽象,還不能夠完善表述Web應用的功能需求。這樣,就需要在MVC的基礎上進一步對Web應用進行細化。
[JP2]這樣,視圖層、模型層的靜態(tài)結構與控制層的靜態(tài)結構相映射,從而根據用戶需求產生對應的響應。這種映射的結構及視圖層、模型層、控制層自身的靜態(tài)與動態(tài)結構即構成Web應用PIM模型的基礎組件,如圖1所示。[BT4]3.2.2 采用DOM4J建立PIM模型的基本框架
DOM4J針對Java提供了方便API接口,為了測試DOM4J與Java結合的性能,接下來采用的PIM模型生成平臺采用JSP頁面編寫,利用DOM4J實現(xiàn)XML格式模型文件的建立及解析。
利用DOM4J,可以按照Web應用的具體功能需求建立一套完整的PIM模型建立規(guī)則。是特定的Web應用(信息發(fā)布系統(tǒng))的控制層中三個基本靜態(tài)結構有:欄目、文章及用戶以組件形式建立PIM對應代碼的過程。其中,相關組件屬性值的初始化過程需要配合測試平臺的用戶交互界面(相關JSP頁面),獲取控制層靜態(tài)結構對應的功能需求來完成,相應PIM生成代碼如圖2所示(已省略部分結構類似的代碼片段)。
由于XML結構的無限擴展特性,使得無論多復雜的Web應用都可以被分級細化并存入PIM模型中。而具體的細化規(guī)則及建模規(guī)則均可以在類似與上文的Java代碼中提現(xiàn),不同的細化規(guī)則及建模規(guī)則對應了不同Web應用的具體功能需求??刂茖拥撵o態(tài)結構細化過程已經由上文的示例給出,視圖層及模型層的細化類似。如圖3為靜態(tài)結構對應的XML格式PIM模型(圖3中的白色高亮代碼部分為圖5中對應部分,下文會具體敘述)。
3.2.3 采用增量式開發(fā)方法管理PIM模型
[JP2]基于這里已經在PIM的初始化中就采用了組件的概念,使用面向組件的增量式開發(fā)方法將更有利于Web應用的完善。每生成一個增量,也就是一次迭代開發(fā),這就要求測試平臺能夠隨時復現(xiàn)之前增量的建立過程,也就是用戶需求的功能子集的提出過程,以便于對需求進行更改。特定的Web應用增量開發(fā)生成相應PIM生成代碼如圖4所示(已省略部分結構類似的代碼片段)。
采用這部分代碼生成PIM模型如圖5所示,圖中的白色高亮代碼與上文圖3相對應。實際上這部分代碼即圖4中Java代碼上半部分中采用的DOM4J集成的SAXReader方法讀取的圖3中代碼。而新增的部分則是采用DOM4J集成的XPath技術找到該特定Web應用的相關靜態(tài)結構節(jié)點(Column,Article,User),再插入與動態(tài)結構功能需求相對應的PIM代碼片段(即圖5中每個節(jié)點的action部分)。
基于類似的方法,可以將Web應用的MVC各層依照Web應用的功能需求,分為各個功能組件進行細化,接下來就細化的功能組件編寫相應的PIM模型生成及解析代碼,最后按照增量式開發(fā)逐步生成Web應用最終的PIM模型。
4 結 語
在此探討了采用DOM4J建立PIM模型的一種方法,并且建立了一個測試平臺,采用增量式開發(fā)方法進行了實驗。鑒于不同Web應用的功能需求及系統(tǒng)的復雜程度不一,按組件細化的過程并沒有現(xiàn)成規(guī)律可循,需要根據具體需求進行相應規(guī)則的建立。另一方面,就Web應用的最終實現(xiàn)而言,PIM模型的建立還應該為MDA開發(fā)的下一階段模型即平臺相關模型PSM預留[LL]相關的接口,以更好地實現(xiàn)其復用及擴展。
參 考 文 獻
[1]沈劍波,潘金貴.基于角色的面向對象建模[J].計算機應用與軟件,2002(6):19[CD*2]23.
[2]David.Model Driven Architecture[CD*2]Foundations and Applications[A].Second European Conference,ECMDA[CD*2]FA 2006[C].Bilbao,Spain,2006.
[3]侯金奎,萬建成,張玉艷.一種支持MDA的PIM建模方法[J].計算機工程,2007(8):71[CD*2]73.
[4]劉華,姜宏.信息系統(tǒng)中PIM功能元模型的構建研究[J].計算機技術與發(fā)展,2007(5):213[CD*2]216.
[5]李偉.基于XML+DOM4J的數據庫集成技術研究[J].電腦知識與技術(學術交流),2007(5):1 192,1 203.
[6]陳軍,山嵐,趙恒永.用Java & XML構建網絡應用系統(tǒng)的方法[J].計算機工程,2008(3):181[CD*2]183.
[7]楊珉池.XML處理工具性能比較[J].電腦知識與技術(學術交流),2006(11):117[CD*2]119.
[8]蔚曉娟,冉靜,李愛華,等.基于DOM的XML解析與應用[J].計算機技術與發(fā)展,2007(4):86[CD*2]88,139.[HJ*2]
[9]孫霞,程宏斌.基于Java的DOM解析技術[J].計算機時代,2004(7):71[CD*2]72.
[10]王軍,黃傳華.DOM4J在數據交換中的應用[J].計算機與現(xiàn)代化,2007(5):98[CD*2]110.
[11]Dennis M,Sosnoaki.Java中的XML:文檔模型(第一部分:性能)[EB/OL].http://www[CD*2]128.ibm.com/developerrvorks/cn/xml/x[CD*2]injava,2005.
[12]王宇,程國忠,張世祿.基于DOM4J實現(xiàn)數據庫表單轉換成XML文檔[J].福建電腦,2007(1):129[CD*2]130.
[13]Herrejon [CD*2],Batory D.Improving Incremental Development in Aspectj by Bounding Quantification[A].SPLAT[C].2005.
作者簡介 譚 凱 男,1984年出生,湖南婁底人,碩士研究生。研究方向為Web應用與基礎。
尹金玉 女,1942年出生,山東人,教授,碩士。主要研究領域為現(xiàn)代電氣控制技術、自動控制、可編程控制器、樓宇自動化。
李亞芬 女,1963年出生,北京人,高級工程師,碩士。主要研究領域為Web應用與基礎、數據庫、計算機控制系統(tǒng)。