張海濱
(中國海洋大學(xué),山東 青島 266100)
軟件開發(fā)從本質(zhì)上講就是一個(gè)從模型到最終代碼的實(shí)現(xiàn)的過程[1]。自O(shè)MG 組織提出MDA 框架以來,基于MDA 的模型轉(zhuǎn)換及代碼的自動生成大大減輕了程序員手工開發(fā)代碼的工作[2-3]。目前國內(nèi)外的開發(fā)人員也就在基于MDA 框架下的各種應(yīng)用進(jìn)行了可行性研究[4-5],主要集中在從一個(gè)平臺無關(guān)模型到平臺相關(guān)模型的轉(zhuǎn)換,而平臺相關(guān)模型是對一個(gè)具體平臺進(jìn)行的一個(gè)抽象,其所抽象的層度取決于各研究開發(fā)人員對PSM 的定位,往往PSM 也只起了一個(gè)概念描述性的作用,本文提出了一種基于FMP-PIM 模型到J2EE 平臺JSF 框架的映射關(guān)系,詳盡描述了FMP 模型中各個(gè)模塊到JSF 框架各組成部分的映射關(guān)系。
MDA(Model Driven Architecture)是OMG 提出的模型驅(qū)動軟件體系結(jié)構(gòu),MDA 一改以前的諸如OMA(對象管理體系結(jié)構(gòu))和CORBA(公共對象請求代理體系結(jié)構(gòu))的分布式系統(tǒng)架構(gòu),而是以模型驅(qū)動為核心,通過模型轉(zhuǎn)換提高軟件開發(fā)的效率。
MDA 的提出是基于系統(tǒng)的具體實(shí)現(xiàn)技術(shù)無關(guān)的功能規(guī)范與系統(tǒng)在特定平臺上的實(shí)現(xiàn)相分離的思想,其核心思想是模型轉(zhuǎn)換,該方法最重要之處是系統(tǒng)規(guī)范與實(shí)現(xiàn)技術(shù)或平臺的分離,再通過形式化映射到具體的平臺基礎(chǔ)(例如Java,XML,SOAP 等)。MDA 定義了3 種模型:①CIM(Computation Independent Model):即計(jì)算無關(guān)模型,關(guān)注系統(tǒng)的需求和環(huán)境,不展示系統(tǒng)的架構(gòu)細(xì)節(jié),是獨(dú)立于軟件的模型。②PIM(Platform Independent Model):即平臺無關(guān)模型,以與平臺無關(guān)的觀點(diǎn)描述系統(tǒng),是具有高度抽象層次的模型。③PSM(Platform Specific Model):平臺相關(guān)模型,關(guān)注某種特定實(shí)現(xiàn)技術(shù),由系統(tǒng)的數(shù)據(jù)、處理進(jìn)程等平臺相關(guān)的信息組成。
基于MDA 的框架的JSF 代碼自動生成的流程圖如圖1 所示:
圖1 代碼自動生成流程圖
在MDA 框架下,軟件開發(fā)人員只需要考慮業(yè)務(wù)邏輯的建模,描述系統(tǒng)的業(yè)務(wù)功能和行為規(guī)范,建立與具體實(shí)現(xiàn)技術(shù)無關(guān)的平臺無關(guān)模型,再通過模型轉(zhuǎn)換得到加入了技術(shù)細(xì)節(jié)的平臺相關(guān)模型,最后由代碼生成器根據(jù)PSM生成最終可執(zhí)行的代碼。PIM 位于高抽象層次,獨(dú)立于任何具體的實(shí)現(xiàn)平臺。PSM 則是基于某種特定的實(shí)現(xiàn)平臺技術(shù)來描述系統(tǒng)的模型,它依賴于該平臺的結(jié)構(gòu)和所提供的功能和服務(wù),包含了系統(tǒng)在該平臺上的實(shí)現(xiàn)細(xì)節(jié),如操作系統(tǒng)、程序設(shè)計(jì)語言、數(shù)據(jù)存儲、用戶界面等。MDA 將PIM 抽象出來,針對不同實(shí)現(xiàn)技術(shù)或平臺從同一個(gè)PIM 制訂出不同的映射規(guī)則,然后通過這些映射規(guī)則及轉(zhuǎn)換工具將PIM 轉(zhuǎn)換成PSM,再將PSM 不斷求精直至生成目標(biāo)代碼。這一切都是基于模型嚴(yán)格的形式化定義和模型間的自動轉(zhuǎn)換而實(shí)現(xiàn)的。
MDA 能帶來快速開發(fā),提高系統(tǒng)可移植性、可維護(hù)性以及系統(tǒng)集成等方面的好處。已有很多開發(fā)商將基于MDA 的技術(shù)融合到他們的企業(yè)級軟件解決方案中,如IBM、Compuware、Sun Microsystems、Adaptive、ADA Software、Kennedy Carter、ATC Enterprises 等,同時(shí)OMG 還建立了MDA FastStart 計(jì)劃來幫助對MDA 感興趣的公司實(shí)現(xiàn)和使用MDA。國內(nèi)外多年的實(shí)踐和市場的驗(yàn)證表明,軟件模型驅(qū)動架構(gòu)在軟件的快速開發(fā)、隨需應(yīng)變、質(zhì)量保證以及成本控制等方面是成功的,有很好的發(fā)展前景。
FMP(Function Model Presentation)是一種支持用戶界面自動生成的界面模型,它是對界面中的抽象數(shù)據(jù)及行為等元素的描述,展示了界面元素與展示對象之間的對應(yīng)關(guān)系。FMP 模型主要包括:Function 功能模型、Model 內(nèi)部模型和Presentation 表示模型三個(gè)部分,F(xiàn)MP 模型圖如圖2所示。
圖2 FMP 源模型
功能模型和對象模型捕捉與界面有關(guān)的數(shù)據(jù)信息和功能元素,交互模型表達(dá)這些信息和控制關(guān)系,表示模型則建立內(nèi)部對象和外部顯示元素之間的對應(yīng)關(guān)系,規(guī)劃界面布局,指導(dǎo)實(shí)現(xiàn)用戶界面的自動生成。有關(guān)FMP 模型的詳細(xì)描述見參考文獻(xiàn)。
JSF(JavaServer Faces)是Craig McClanahan,Ed Burns等人于最終形成規(guī)范的一個(gè)基于Java 的Web 應(yīng)用框架。JSF 為基于Java 的Web 應(yīng)用開發(fā)提供了一個(gè)可重用、可擴(kuò)展、基于組件的服務(wù)器端UI 框架,可以方便快捷的構(gòu)建Web 用戶界面,降低了利用Java 技術(shù)實(shí)現(xiàn)Web 用戶界面的難度。它通過一個(gè)控制器Servlet 提出Web 應(yīng)用程序生命周期管理工作,并提供一組標(biāo)準(zhǔn)的、可重用的服務(wù)器端組件來構(gòu)建用戶界面,而且能夠在服務(wù)器上處理客戶端事件、輸入驗(yàn)證等用戶界面管理問題。JSF 主要包括兩大方面內(nèi)容:一個(gè)是API 集合,用來表示用戶接口組件,管理組件的狀態(tài),處理事件和驗(yàn)證輸入,定義頁面間的導(dǎo)航以及支持國際化:另一個(gè)是JSP 自定義標(biāo)簽庫,用來在JSP 頁面中顯示JSP 接口。
JSF 框架負(fù)責(zé)與客戶端設(shè)備交互,并且提供一些工具將Web 應(yīng)用程序可視表示,應(yīng)用邏輯和業(yè)務(wù)邏輯連接在一起,JSF 的范圍主要被限制在表示層。JSF 框架見圖3。
圖3 JSF 框架
FMP 模型與JSF 框架的映射如圖4 所示。
圖4 FMP 模型與JSF 框架的映射關(guān)系
功能模型描述了用戶通過界面所進(jìn)行的操作處理,這些操作處理通過代碼生成器映射到JSF 中的一個(gè)或多個(gè)Enterprise Beans,而在J2EE 平臺中,Enterprise Beans 被配置到一個(gè)裝了EJB 容器的平臺上,應(yīng)用實(shí)例通過這些Beans 的home 接口,定位到某個(gè)beans,并產(chǎn)生這個(gè)beans的一個(gè)實(shí)例。
對象模型描述的是界面的數(shù)據(jù)模型,通過對象模型與功能模型的交互建立對象行為與界面功能的對應(yīng)關(guān)系。為界面功能提供實(shí)現(xiàn)條件。
交互模型是根據(jù)功能模型和對象型而建立的界面構(gòu)成及關(guān)系描述,它與Web 頁面的展示有著互動關(guān)系,映射到Web 頁面對應(yīng)的PageBean,針對Web 頁面中的屬性和方法原則上都對應(yīng)著PageBean 中的一個(gè)set 方法和一個(gè)get 方法。
界面模板是與界面模型對應(yīng)的界面的外在形式的一個(gè)抽象描述,經(jīng)過代碼器生成Web 頁面html 展示。
體系結(jié)構(gòu)配置信息映射著JSF 的Web 頁面展示所必須的配置信息,如ds.xml,faces-config.xml 和web.xml 等。
為了更能清楚的說明問題,現(xiàn)舉一個(gè)組合格式的信息查詢系統(tǒng),如圖5 所示。圖a 是信息查詢系統(tǒng)的FMP 功能模型,展示了角色Actor 對復(fù)合用例JSPQuery 所執(zhí)行的功能。圖b 是對應(yīng)的對象模型,定義了類student。圖c 顯示的是信息查詢的交互模型,復(fù)合用例JSPQuery 執(zhí)行Requerystu 操作導(dǎo)航到顯示結(jié)果頁面。圖d 顯示了信息查詢的界面模板。
圖5 信息查詢系統(tǒng)模型
FMP 模型到PAF 模型的整體映射如圖6 所示。本文用OCL 來描述轉(zhuǎn)換規(guī)則,限于篇幅,這里只給出FMP 中用例的的Class 到PAF 的Class 的轉(zhuǎn)換規(guī)則。
圖6 FMP 模型與PAF 的映射關(guān)系
映射到JSF 框架后,由html 格式的JSP 頁面展示出界面模板的Web 頁面,由于本信息查詢系統(tǒng)功能比較單一,故而沒有生成獨(dú)立的EJB,而JavaBean 中則包含了界面模板中主要屬性和元素的set 方法和get 方法及某些動作的相應(yīng)方法(如生成SQL 語句執(zhí)行查詢操作),同時(shí)FMP 模型體系結(jié)構(gòu)配置信息經(jīng)過代碼生成器生成了在Servlet 容器中所必需的配置信息。
一方面,MDA 技術(shù)的日益成熟和完善,減輕了程序員的手工開發(fā)代碼的工作量。另一方面。JSF 大大降低了利用Java 技術(shù)實(shí)現(xiàn)Web 頁面的難度,本文以MDA 技術(shù)為基礎(chǔ),依據(jù)FMP 模型實(shí)現(xiàn)代碼到JSF 的自動轉(zhuǎn)換,描述了其映射關(guān)系,為基于J2EE 平臺的WEB 應(yīng)用提供了一種新的代碼自動生成方法。隨著研究的進(jìn)一步深入,這些工作將會對基于模型驅(qū)動的Web 代碼自動生成有一定的促進(jìn)作用。
[1]Joaquin Miller and Jishnu Mukerji.MDA Guide Version 1.0.1,Document number omg/2011 -06 -01.http://www.omg.org/docs/omg/11 -06 -01.pdf.
[2]Craig McClanahan,Ed Burns,Roger Kitain.JavaServer Faces Specification Version 1.1,http://java.sun.com/javaee/javaserverfaces.
[3]Devon Simmonds,Arnor Solberg,Raghu Reddy,Robert France,Sudipto Ghosh.An Aspect Oriented Model Driven Framework[C].Ninth IEEE International Conference on EDOC Enterprise Computing,2010:175 -780.
[4]Jana Koehler,Rainer Hauser,Shubir Kapoor,F(xiàn)red Y.Wu,Santhosh Kumaran.A Model -Driven Transformation Method.Proceeding of Seventh IEEE International Conference on Enterprise Distributed Object Computing,2008:231 -236.
[5]Bexivin.J,Hammoudi.S,Lopes.D,Jouault.F.Applying MDA Approach for Web Service Platform.Proceedings in Eighth IEEE International Conference on Emterprise Distributed Object Computing (EDOC),2009:83 -90.
[6]左學(xué)明,張力.一種新的基于JSF 技術(shù)的Web 用戶界面開發(fā)方法[J].計(jì)算機(jī)應(yīng)用,2005,12(01) :69 -73.
[7]朱慶生,葛亮.新一代Web 應(yīng)用框架JSF[J].計(jì)算機(jī)科學(xué),2005,32(07) :8 -11.
[8]萬建在,孫彬.支持用戶界面自動生成的界面模型[J].計(jì)算機(jī)工程與應(yīng)用,2003,23(18) :75 -80.
山東開放大學(xué)學(xué)報(bào)2013年3期