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