• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      Web應(yīng)用代碼生成系統(tǒng)的設(shè)計與實現(xiàn)

      2010-06-22 03:41:08李亞芬
      現(xiàn)代電子技術(shù) 2009年22期

      宋 微 李亞芬

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

      關(guān)鍵詞:代碼生成系統(tǒng);MVC;JET;Web應(yīng)用

      中圖分類號:TP311

      0 引 言

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

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

      在此采用模型驅(qū)動(MDA)開發(fā)的思想,設(shè)計并實現(xiàn)了一個面向Web應(yīng)用的代碼生成系統(tǒng),在開發(fā)人員簡單配置下,能夠快速構(gòu)建Web應(yīng)用,顯著提高了Web應(yīng)用的開發(fā)效率。

      1 Web應(yīng)用體系結(jié)構(gòu)

      [BT3]1.1 MVC設(shè)計模式

      MVC設(shè)計模式是基于J2EE的Web應(yīng)用開發(fā)的首選模式,它強(qiáng)制性地將應(yīng)用程序的輸入、處理和輸出分開,使應(yīng)用程序分成模型層、控制器、視圖層,并各自處理自己的任務(wù)。

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

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

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

      綜上,基于MVC的設(shè)計模式開發(fā)Web應(yīng)用,┟懇徊悛在處理程序上都有明確的任務(wù)與功能,實現(xiàn)了系統(tǒng)結(jié)構(gòu)層次清晰及各層間的解耦,從而大大提高了代碼的靈活性和復(fù)用性。

      [BT3]1.2 Web應(yīng)用框架結(jié)構(gòu)

      本文框架結(jié)構(gòu)基于MVC設(shè)計模式,并使用了大量優(yōu)秀的設(shè)計模式,如模板模式、工廠模式、適配器模式等,篇幅有限,不再贅述。

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

      Servlet充當(dāng)控制的角色,它接收請求,并且根據(jù)請求信息將它們分發(fā)給適當(dāng)?shù)腏SP頁面來產(chǎn)生響應(yīng)[6]。Servlet控制器還根據(jù)JSP視圖的需求生成實體Entity的實例并輸出給JSP環(huán)境。JSP視圖可以通過直接調(diào)用Entity實例的方法得到Entity中的數(shù)據(jù)。

      下面對各層次模型在Web系統(tǒng)中的作用以及實現(xiàn)方法進(jìn)行詳細(xì)闡述。

      [BT4]1.2.1 模型層

      Web應(yīng)用架構(gòu)模型層由實體實現(xiàn),如圖2所示。

      CommonEntity執(zhí)行基本的實體操作,包含屬性table,property以及與數(shù)據(jù)庫的操作等。具體操作的實體均繼承自這個統(tǒng)一的抽象類CommonEntity,各業(yè)務(wù)對象的實體對應(yīng)于其具體對應(yīng)的數(shù)據(jù)庫表,包含數(shù)據(jù)庫表的基本屬性字段的表示信息。

      各個具體的實體類在結(jié)構(gòu)上非常相似,都是get和set方法,只是具體的屬性不同,保持了良好的面向?qū)ο笤O(shè)計風(fēng)格。這樣,有利于從目標(biāo)代碼中抽象出統(tǒng)一的結(jié)構(gòu)作為模板,使模型層代碼的生成更為簡單。

      [BT4]1.2.2 控制層

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

      各個模塊對應(yīng)的Servlet在結(jié)構(gòu)上具有很大的相似性,很容易提煉出統(tǒng)一結(jié)構(gòu)作為模板。應(yīng)用代碼生成器,可以使Web開發(fā)速度得到很大提高。

      [BT4]1.2.3 視圖層

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

      通過以上分析可知,這里所采用的Web應(yīng)用框架結(jié)構(gòu),在根據(jù)MVC模式劃分的每一層中,都將大量的通用操作封裝在抽象類中,具體業(yè)務(wù)對象繼承抽象類實現(xiàn)具體的業(yè)務(wù)邏輯,在很大程度上減少了代碼的重復(fù)率。

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

      根據(jù)對目標(biāo)系統(tǒng)的分析,可最終確定需要生成哪些目標(biāo)代碼,主要有:

      (1) 視圖層:各業(yè)務(wù)對象的add,list,update頁面(delete直接用Servlet實現(xiàn));

      (2) 控制層:各業(yè)務(wù)對象進(jìn)行add,delete,update,query操作所對應(yīng)的Servlet;

      (3) 模型層:各業(yè)務(wù)對象相應(yīng)的entity。

      2 代碼生成器的設(shè)計

      [BT3]2.1 代碼生成方式

      由第1.2節(jié)可知,各層目標(biāo)代碼由代碼生成器自動生成。關(guān)于代碼生成器,比較典型的幾種生成方式包括:

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

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

      (2) 面向?qū)傩跃幊?。主要是XDoclet,

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

      (3) 基于MDA。

      主要是AndroMDA,它是在模板技術(shù)和XDoclet兩項技術(shù)的基礎(chǔ)上實現(xiàn)Code Generation的。

      (4) 基于模板解析。

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

      在本文的代碼生成系統(tǒng)中,根據(jù)第1.2節(jié)中對目標(biāo)代碼的分析,需對每一層進(jìn)行模板的提取,輸入XML文件中包含具體的用戶需求信息,二者進(jìn)行相應(yīng)融合,即可逐層生成目標(biāo)代碼。

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

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

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

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

      下面對代碼生成器的各部分進(jìn)行說明:

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

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

      利用XML Schema對XML文件的語法格式及有效性進(jìn)行驗證,以保證代碼生成的質(zhì)量。XML Schema指定XML文檔所允許的組織結(jié)構(gòu)和必須包含的內(nèi)容,如:文檔中元素屬性、子元素的數(shù)量、屬性等。

      (2) 模板文件。

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

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

      (3) 控制文件。

      JET是功能強(qiáng)大且靈活的模板引擎,包裝在〦clipse建??蚣蹺MF之內(nèi),通過控制文件main.jet控制代碼的生成。JET編譯器為每一個代碼模板創(chuàng)建一個Java源文件,并在生成代碼之前自動將代碼模板編譯成JavaClass文件,然后接受用戶輸入的參數(shù),產(chǎn)生目標(biāo)代碼??刂莆募凶钪匾臉?biāo)記是,它將執(zhí)行一個模板并將結(jié)果轉(zhuǎn)儲至指定文件。

      3 代碼生成系統(tǒng)的實際驗證

      [BT3]3.1 代碼生成系統(tǒng)的總體結(jié)構(gòu)

      以一個簡單的Web信息發(fā)布系統(tǒng)為例,利用本文代碼生成系統(tǒng),可生成各層目標(biāo)代碼。當(dāng)業(yè)務(wù)對象發(fā)生變更或需要維護(hù)時,只需要修改相關(guān)代碼生成系統(tǒng)的輸入模型就可以重新生成目標(biāo)代碼,使Web應(yīng)用的可維護(hù)性大大提高。

      該代碼生成系統(tǒng)的總體結(jié)構(gòu)如圖5所示,主要包含模型庫、模板轉(zhuǎn)換庫、代碼生成器三大部分。

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

      模型庫以及模板轉(zhuǎn)換庫的采用能夠提高XML文件和各類型模板文件的使用率,從而提高代碼生成系統(tǒng)的可維護(hù)性及可擴(kuò)展性。

      [BT3]3.2 代碼生成系統(tǒng)各部分介紹

      [BT4]3.2.1 數(shù)據(jù)模型的輸入及驗證

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

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

      對于每一個模塊,在具體描述上都與Web應(yīng)用的三層結(jié)構(gòu)相對應(yīng),分別從視圖層、控制層和模型層三方面對系統(tǒng)模型進(jìn)行描述。

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

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

      [BT4]3.2.2 模板文件

      根據(jù)第1.2節(jié)對代碼生成系統(tǒng)目標(biāo)代碼的分析,可以歸納出需要抽象的模板,主要有:

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

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

      模型層:entity模板。

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

      [BT4]3.2.3 控制文件

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

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

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

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

      4 結(jié) 語

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

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

      要實現(xiàn)可以滿足更多需求的Web應(yīng)用代碼生成系統(tǒng),還需要進(jìn)一步更深入的工作。

      參 考 文 獻(xiàn)

      [1]孫茂增,李鳳華,都婧.基于Velocity的J2EE應(yīng)用代碼生成系統(tǒng)[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應(yīng)用框架研究[D].大連:大連海事大學(xué),2007.

      [4]王廣峰.模型驅(qū)動的J2EE Web應(yīng)用生成器的設(shè)計與實現(xiàn)[D].濟(jì)南:山東大學(xué),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]陳翔,王學(xué)斌,吳泉源.代碼生成技術(shù)在MDA中的實現(xiàn)[J].計算機(jī)應(yīng)用研究,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開發(fā)數(shù)據(jù)持久層應(yīng)用的方法的設(shè)計與實現(xiàn)[D].上海:復(fù)旦大學(xué),2006.

      [10]尹彥均.Web應(yīng)用代碼自動生成平臺中代碼生成系統(tǒng)的研究與實現(xiàn)[D].北京:北京工業(yè)大學(xué),2007.

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

      李亞芬 女,1963年出生,北京人,高級工程師,碩士研究生。主要研究領(lǐng)域為Web應(yīng)用與基礎(chǔ)、數(shù)據(jù)庫、計算機(jī)控制系統(tǒng)。

      南溪县| 花莲县| 台湾省| 恩施市| 恩平市| 永安市| 涪陵区| 郁南县| 盘山县| 汝阳县| 新郑市| 台湾省| 古交市| 花莲县| 梨树县| 彩票| 奉节县| 益阳市| 临沧市| 洪湖市| 华蓥市| 满洲里市| 德令哈市| 申扎县| 黑龙江省| 汉中市| 崇义县| 古蔺县| 南木林县| 黎川县| 雷波县| 雷州市| 锦屏县| 通辽市| 大连市| 中宁县| 美姑县| 玉树县| 绵竹市| 和硕县| 碌曲县|