999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Web應用代碼生成系統的設計與實現

2010-06-22 03:41:08李亞芬
現代電子技術 2009年22期

宋 微 李亞芬

摘 要:代碼生成工具的使用可以大幅度減少開發人員編寫重復性代碼的工作量,提高Web應用開發的質量和效率。在代碼生成系統中,設計一種基于MVC設計模式的新型Web應用開發框架,將Web應用分為視圖層、控制層和模型層,每層各司其職,代碼結構清晰,在此基礎上采用JET模板和Xpath相結合的代碼生成方法生成重復性代碼。實驗證明,該系統可快速構建Web應用。

關鍵詞:代碼生成系統;MVC;JET;Web應用

中圖分類號:TP311

0 引 言

早期Web應用使用ASP,JSP等技術進行編碼,將頁面顯示、業務邏輯和數據庫操作大部分都集中在頁面代碼中,維護困難,不利于分工協作。隨著Web技術的飛速發展,Web組件的開發方式成為主導,MVC設計模式是其中的典型,各種框架也紛紛出現,如Struts,Spring框架等,在很大程度上降低了Web開發的難度,但也存在很多不足,如難于掌握,配置復雜等,對于很多Web應用項目并不適用。在此基于MVC模式,并結合大量設計模式,設計一種新型的Web應用開發框架,代碼結構清晰,復雜度低,易于理解,并且配置簡單,加強了系統的可擴展性,降低了軟件開發成本。

基于Web應用本身的特點,采用上述框架開發Web應用,對于不同模塊而言,各層次代碼在實現上有很大的相似性,開發人員需要重復編寫大量代碼,嚴重影響了軟件開發速度。代碼生成技術的引入,在很大程度上可以解決這一問題,大大減少了軟件開發中枯燥且重復的編碼工作,更進一步加快了Web應用的開發。

在此采用模型驅動(MDA)開發的思想,設計并實現了一個面向Web應用的代碼生成系統,在開發人員簡單配置下,能夠快速構建Web應用,顯著提高了Web應用的開發效率。

1 Web應用體系結構

[BT3]1.1 MVC設計模式

MVC設計模式是基于J2EE的Web應用開發的首選模式,它強制性地將應用程序的輸入、處理和輸出分開,使應用程序分成模型層、控制器、視圖層,并各自處理自己的任務。

模型層封裝了數據和對數據的操作,是應用程序的主體部分。MVC三個部件中,模型層擁有最多的處理任務。同一個模型可被多個視圖重用,提高了應用的可重用性。通過模型層,可以確定需要操作的數據、業務處理方法以及需要設計什么樣的視圖層頁面[3]。

控制層用來處理業務邏輯,負責視圖和模型之間的交互,控制對用戶輸入響應方式和流程。它主要負責兩方面的動作:把用戶的請求分發到相應的模型;將模型的改變及時反應到視圖上[4]。

視圖層是模型的表示,用于管理用戶請求并做出相應的響應。對于Web應用程序,視圖主要指HTML或JSP頁面。視圖向用戶顯示相關的數據,并能接收用戶的輸入數據,提交給Web服務器進行處理。但是它并不進行任何實際的業務處理[5]。

綜上,基于MVC的設計模式開發Web應用,┟懇徊悛在處理程序上都有明確的任務與功能,實現了系統結構層次清晰及各層間的解耦,從而大大提高了代碼的靈活性和復用性。

[BT3]1.2 Web應用框架結構

本文框架結構基于MVC設計模式,并使用了大量優秀的設計模式,如模板模式、工廠模式、適配器模式等,篇幅有限,不再贅述。

框架將目標系統分為模型層、控制層、視圖層三層。其中,視圖層通過JSP實現,控制層通過Servlet來實現,而模型層則通過實體Entity來實現。三者之間的交互模式如圖1所示。

Servlet充當控制的角色,它接收請求,并且根據請求信息將它們分發給適當的JSP頁面來產生響應[6]。Servlet控制器還根據JSP視圖的需求生成實體Entity的實例并輸出給JSP環境。JSP視圖可以通過直接調用Entity實例的方法得到Entity中的數據。

下面對各層次模型在Web系統中的作用以及實現方法進行詳細闡述。

[BT4]1.2.1 模型層

Web應用架構模型層由實體實現,如圖2所示。

CommonEntity執行基本的實體操作,包含屬性table,property以及與數據庫的操作等。具體操作的實體均繼承自這個統一的抽象類CommonEntity,各業務對象的實體對應于其具體對應的數據庫表,包含數據庫表的基本屬性字段的表示信息。

各個具體的實體類在結構上非常相似,都是get和set方法,只是具體的屬性不同,保持了良好的面向對象設計風格。這樣,有利于從目標代碼中抽象出統一的結構作為模板,使模型層代碼的生成更為簡單。

[BT4]1.2.2 控制層

對于系統的控制層,采用Servlet實現,如圖3所示。通過CommonServlet設置一些基本功能,其中包括訪問控制、日志處理等信息。然后由較具體的類繼承這個CommonServlet,它們實現各自的執行方法,但是并不具體。例如,對于Web應用的基本功能:增加、刪除、修改、查詢操作,與業務對象無關的實現操作都抽象在二級抽象類Addservlet,Deleteservlet,Updateservlet及Queryservlet中,各業務對象對應的具體模塊中相應操作的Servlet繼承二級抽象類,完成具體操作。這在很大程度上減少了代碼的重復,提高了代碼的利用率。

各個模塊對應的Servlet在結構上具有很大的相似性,很容易提煉出統一結構作為模板。應用代碼生成器,可以使Web開發速度得到很大提高。

[BT4]1.2.3 視圖層

視圖層為顯示提供一個數據模型,用于管理用戶的請求并做出相應的響應。不同的業務邏輯對應不同的頁面,如添加頁面add.jsp、列表頁面list.jsp等,且根據用戶需求的不同,選擇多種頁面風格,對于不同對象,只是顯示的內容有所不同。本文框架的設計使視圖層大大簡化,同一種類型的頁面對于各個模塊而言,包含大量的結構相似代碼,同樣適于使用代碼生成工具實現。

通過以上分析可知,這里所采用的Web應用框架結構,在根據MVC模式劃分的每一層中,都將大量的通用操作封裝在抽象類中,具體業務對象繼承抽象類實現具體的業務邏輯,在很大程度上減少了代碼的重復率。

具體業務對象的增加、刪除、修改、查詢等功能在系統各模塊中的處理方式相似,開發人員手動開發重復率很高,交互頁面也存在大量的重復設計。這類代碼非常適合于使用代碼生成工具實現,代碼生成技術的引入將大大地減少重復工作,減少開發的工作量。

根據對目標系統的分析,可最終確定需要生成哪些目標代碼,主要有:

(1) 視圖層:各業務對象的add,list,update頁面(delete直接用Servlet實現);

(2) 控制層:各業務對象進行add,delete,update,query操作所對應的Servlet;

(3) 模型層:各業務對象相應的entity。

2 代碼生成器的設計

[BT3]2.1 代碼生成方式

由第1.2節可知,各層目標代碼由代碼生成器自動生成。關于代碼生成器,比較典型的幾種生成方式包括:

(1) 使用XSLT把XML轉為Java源代碼。

采用XSLT處理器完成模板解析和變量替換,并使用樣式表語言,免去為文本定制規范的工作[7]。

(2) 面向屬性編程。主要是XDoclet,

XDoclet使用類似JavaDoc標記的注釋向類、方法和字段等語言特征添加元數據。隨后,它利用這些額外的元數據自動生成配置文件、源代碼等。

(3) 基于MDA。

主要是AndroMDA,它是在模板技術和XDoclet兩項技術的基礎上實現Code Generation的。

(4) 基于模板解析。

通過模板解析引擎將輸入數據替換模板文件中可變部分生成目標代碼,能夠生成Java,C/C++,SQL等各種語言代碼。采用模板方式生成代碼,可減小復雜性和增加可讀性,是代碼生成的主要實現手段[8]。

在本文的代碼生成系統中,根據第1.2節中對目標代碼的分析,需對每一層進行模板的提取,輸入XML文件中包含具體的用戶需求信息,二者進行相應融合,即可逐層生成目標代碼。

成熟的模板引擎主要有Velocity,JET等,Velocity通過調用JDOM完成對XML文檔的解析,編碼量大,而基于EMF框架的JET模板引擎采用Xpath查詢語言完成對XML文檔的解析,大大減少了編碼量,從而使代碼生成過程更為快速,已經越來越多的被使用。

綜上,在本文代碼生成系統中,代碼生成器部分使用JET模板引擎,以XML文件為輸入數據模型,采用JET模板和XPath相結合的代碼生成方法。

[BT3]2.2 基于JET模板的代碼生成器

基于JET的代碼生成過程包括:加載以XML格式存儲的數據模型,通過XML Schema對模型進行結構完整性和語義一致性檢查,檢查通過,則執行模板引擎(控制文件),將模板文件與XML文件中的內容合并以生成目標代碼。生成過程如圖4所示。

下面對代碼生成器的各部分進行說明:

(1) XML文件驗證(XML Validator)。

XML文件用來存儲和交換數據,采用層化關系,允許每個節點具有屬性,使動態參數容易被獲得。XML文件定義相關數據信息,標簽名是模板中待替換參數,標簽值則用于代替模板中待替換的參數[9]。

利用XML Schema對XML文件的語法格式及有效性進行驗證,以保證代碼生成的質量。XML Schema指定XML文檔所允許的組織結構和必須包含的內容,如:文檔中元素屬性、子元素的數量、屬性等。

(2) 模板文件。

在采用JET語言編寫模板文件時,JET使用類JSP的語法,包括目標代碼中的相同部分及各JET標簽,可接受輸入對象作為參數,可直接使用Java代碼執行循環、聲明變量或執行邏輯流程控制(腳本)[10] 。

JET支持Xpath查詢語言,標簽中select屬性通過括號({ 和 })包含動態的XPath表達式,對XML文檔中標簽名和標簽值進行解析,讀取相關元素及屬性信息。

(3) 控制文件。

JET是功能強大且靈活的模板引擎,包裝在〦clipse建模框架EMF之內,通過控制文件main.jet控制代碼的生成。JET編譯器為每一個代碼模板創建一個Java源文件,并在生成代碼之前自動將代碼模板編譯成JavaClass文件,然后接受用戶輸入的參數,產生目標代碼。控制文件中最重要的標記是,它將執行一個模板并將結果轉儲至指定文件。

3 代碼生成系統的實際驗證

[BT3]3.1 代碼生成系統的總體結構

以一個簡單的Web信息發布系統為例,利用本文代碼生成系統,可生成各層目標代碼。當業務對象發生變更或需要維護時,只需要修改相關代碼生成系統的輸入模型就可以重新生成目標代碼,使Web應用的可維護性大大提高。

該代碼生成系統的總體結構如圖5所示,主要包含模型庫、模板轉換庫、代碼生成器三大部分。

模型庫用于存放描述數據模型信息的XML文件,模板轉換庫中,以目錄樹的形式存放不同類別的模板;另外,模板轉換庫還存放有成熟的,具有特定功能的代碼片斷,有使用需要時,將其綁定到模板中的相應位置。代碼生成器通過控制文件,從模型庫選擇需要的XML文件,模板轉換庫選擇相應的模板文件,從而生成Web應用。

模型庫以及模板轉換庫的采用能夠提高XML文件和各類型模板文件的使用率,從而提高代碼生成系統的可維護性及可擴展性。

[BT3]3.2 代碼生成系統各部分介紹

[BT4]3.2.1 數據模型的輸入及驗證

數據模型包含用戶需求的所有數據源,前期的數據源越準確、豐富,其結果也就越符合下一道工序的要求。因此,只有對系統的模型描述得準確和完整,才能更準確地生成Web應用代碼。本代碼生成系統針對完整的Web應用,因此XML文件中包含了用戶所提供的Web應用各模塊全部信息。

以下所示的程序中XML文件按照用戶需求將數據對象的信息分成幾個模塊進行描述,程序中展示了代碼生成系統輸入XML文件的部分內容,包含欄目、文章、用戶等模塊。

對于每一個模塊,在具體描述上都與Web應用的三層結構相對應,分別從視圖層、控制層和模型層三方面對系統模型進行描述。

據此,XML文件分為四層進行描述,以欄目模塊的模型層為例,四層分別為Webinfo,App,Model,〢ttr。其中,標簽名,如Attr層的name,type是模板中待替換的參數,而標簽值,如ColumnID,ColumnName,String則用于代替模板中待替換的參數。這些描述表示欄目模塊模型層代碼中包含兩個屬性,分別為ColumnID,ColumnName,類型都是String。

Webinfo[CD*2]PSM層指定系統XML文件中Schema 定義書的位置和名稱。只有通過Schema驗證,生成過程才能順利進行。

[BT4]3.2.2 模板文件

根據第1.2節對代碼生成系統目標代碼的分析,可以歸納出需要抽象的模板,主要有:

視圖層:add,list,update頁面模板;

控制層:add,delete,update,query的Servlet模板;

模型層:entity模板。

[JP2]以模型層為例,對于XML文件中包含的幾個模塊,都對應著相同的模板文件,如以下程序所示。select屬性包含Xpath路徑,通過路徑表達式可得到XML文件中的相應信息。

[BT4]3.2.3 控制文件

代碼生成器控制文件如以下程序所示。

控制文件指定模板文件及生成代碼的路徑及名稱,執行時選定輸入文件webinfo.xml,即可生成所需代碼文件。由第3.2.2節所示程序可知,根元素Webinfo[CD*2]PSM下包含三個app元素,則利用,即可同時生成articleEntity.java,columnEntity.java以及userEntity.java三個文件。各個文件的結構是一樣的。

同樣,對于控制層而言,利用寫好的模板文件delete.jet,add.jet,update.jet,query.jet,可以通過代碼生成器生成各個模塊的delete,add,update,query代碼文件;對于視圖層而言,利用模板文件jspadd.jet,list.jet,jspupdate.jet,即可生成相應添加、列表、修改等頁面代碼。

這樣,通過代碼生成系統的使用,大大減少了手工編寫重復代碼,提高了軟件開發的效率。

4 結 語

在此設計了一種基于MVC模式的新型Web應用框架結構,將Web應用分為視圖層、控制層、模型層,每一層都有明確分工,層次清晰,結構明顯。在各層中,將大量的通用操作封裝在抽象類中,具體業務對象繼承抽象類實現功能,使代碼更為簡潔、清晰。這樣,涉及到業務對象的代碼通過代碼生成器生成,進一步減少重復性代碼的編碼量。

該代碼生成系統已經在一個Web應用系統的開發項目中經過測試和檢驗。實踐證明,使用該代碼生成系統開發Web應用,可以大幅度提高Web應用開發的質量和效率,但本文所研究的代碼生成系統,只能生成具有增加、刪除、修改、查詢功能的Web應用,對于更加復雜的需求,還需進一步擴充模板庫,以及對XML文件的描述語言進一步細化。

要實現可以滿足更多需求的Web應用代碼生成系統,還需要進一步更深入的工作。

參 考 文 獻

[1]孫茂增,李鳳華,都婧.基于Velocity的J2EE應用代碼生成系統[J].儀器儀表用戶,2008,15(1):105[CD*2]106.

[2]Hailpern B,Tarr P.Model[CD*2]driven Development: the Good,the Bad and the Ugly[J].IBM Systems Journal,2006,48(3):451[CD*2]461.

[3]李憲軍.基于J2EE的Web應用框架研究[D].大連:大連海事大學,2007.

[4]王廣峰.模型驅動的J2EE Web應用生成器的設計與實現[D].濟南:山東大學,2006.

[JP2][5]Rod Johnson.J2EE Development Frameworks[J].〤omputer,2005,1(1):107[CD*2]110.[JP]

[JP2][6]Ken Kennedy,Bradley Broom,Arun Chauhan.Telescoping Languages:A System for Automatic Generation of Domain Languages[J].Procedding of the IEEE,2005,93(2):266[CD*2]297.[JP]

[7]陳翔,王學斌,吳泉源.代碼生成技術在MDA中的實現[J].計算機應用研究,2006(1):148[CD*2]149.

[JP2][8]Hugge N,Wagner B.A New Function Block Modeling Language Based on Petri Nets for Automatic Code Generation [J].IEEE Trans.on Industrial Informatics,2005,1(4):226[CD*2]237.[JP]

[9]戴周林.DaPerM:一種用MDA開發數據持久層應用的方法的設計與實現[D].上海:復旦大學,2006.

[10]尹彥均.Web應用代碼自動生成平臺中代碼生成系統的研究與實現[D].北京:北京工業大學,2007.

作者簡介 宋 微 女,1982年出生,河北保定人,碩士研究生。研究方向為Web應用與基礎。

李亞芬 女,1963年出生,北京人,高級工程師,碩士研究生。主要研究領域為Web應用與基礎、數據庫、計算機控制系統。

主站蜘蛛池模板: 久久五月视频| 女人18毛片一级毛片在线| 毛片卡一卡二| 日韩av无码DVD| 19国产精品麻豆免费观看| 毛片基地视频| 在线视频一区二区三区不卡| 国产精品开放后亚洲| 亚洲中文字幕无码爆乳| 国产成人乱码一区二区三区在线| 国产97视频在线观看| 成人免费一区二区三区| 国产精品无码作爱| 四虎亚洲国产成人久久精品| 久久精品91麻豆| 国产一级裸网站| 91久久精品日日躁夜夜躁欧美| 91麻豆国产视频| 内射人妻无码色AV天堂| 国产精品一区二区在线播放| 91在线中文| 亚洲va视频| 国产精品一线天| 国产精品太粉嫩高中在线观看| 亚洲成a人在线观看| 视频二区国产精品职场同事| 国产精品xxx| 麻豆国产精品| 国产乱子伦无码精品小说 | 国产在线观看人成激情视频| 国产白浆在线观看| 在线视频97| 老司机精品一区在线视频| 国产精品女人呻吟在线观看| 久青草免费在线视频| 日韩欧美国产成人| 国产微拍一区| 国产人成在线视频| 波多野结衣在线se| 欧美激情一区二区三区成人| 国产呦视频免费视频在线观看| 欧美亚洲综合免费精品高清在线观看 | 欧美国产在线一区| 国产成人综合亚洲网址| 日日噜噜夜夜狠狠视频| 全午夜免费一级毛片| 国产在线观看高清不卡| 久久精品无码一区二区国产区 | 亚洲AⅤ波多系列中文字幕| 午夜综合网| 亚洲视频二| 亚洲国产欧美自拍| 国产精品熟女亚洲AV麻豆| 国产不卡网| 精品免费在线视频| av尤物免费在线观看| 四虎影视无码永久免费观看| 日本免费a视频| 国产99视频精品免费观看9e| 人妻夜夜爽天天爽| 亚洲午夜福利在线| 国产精品视频白浆免费视频| 精品伊人久久久大香线蕉欧美| 欧美在线精品怡红院| 女人18毛片水真多国产| 日韩人妻无码制服丝袜视频| 久久精品人人做人人爽电影蜜月| 中文毛片无遮挡播放免费| 日韩黄色大片免费看| 免费A级毛片无码免费视频| 国产成人喷潮在线观看| 亚洲专区一区二区在线观看| 黄色片中文字幕| 国产xx在线观看| 色天堂无毒不卡| 亚洲天堂久久久| 99福利视频导航| 国产精品天干天干在线观看| 国产乱子伦无码精品小说| 无码精品一区二区久久久| 91精品专区| 国产精品综合色区在线观看|