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

基于關(guān)系數(shù)據(jù)模型代碼生成器的設(shè)計(jì)與實(shí)現(xiàn)

2010-11-26 01:06:56冉春娟黃華
關(guān)鍵詞:語言

冉春娟,黃華

(武漢大學(xué) 計(jì)算機(jī)學(xué)院,湖北 武漢 430071)

近年來,企業(yè)或政府部門的核心業(yè)務(wù)大多通過管理信息系統(tǒng)MIS實(shí)現(xiàn),MIS系統(tǒng)開發(fā)成為應(yīng)用系統(tǒng)開發(fā)的主流.在當(dāng)前計(jì)算機(jī)技術(shù)條件下,MIS系統(tǒng)大部分是構(gòu)建在關(guān)系數(shù)據(jù)模型上,其系統(tǒng)的開發(fā)方法也有很多的相似性.通過考察基于主流開發(fā)平臺(如Java與.Net)多層架構(gòu)的程序?qū)崿F(xiàn)代碼,發(fā)現(xiàn)大量相似程序代碼都與關(guān)系數(shù)據(jù)模型相關(guān),根據(jù)所做的統(tǒng)計(jì),其平均代碼行數(shù)占到總代碼行數(shù)的50%,有的甚至接近70%.如能以關(guān)系數(shù)據(jù)模型作為輸入,自動(dòng)生成相關(guān)程序代碼,必將可以大大縮短MIS系統(tǒng)的開發(fā)周期,提高軟件代碼的質(zhì)量,也可快速適應(yīng)MIS系統(tǒng)頻繁的需求變化.

1 現(xiàn)有代碼生成技術(shù)分析

從現(xiàn)有的主流代碼生成技術(shù)看,都采用了基于模板的方法,即以成功應(yīng)用的程序代碼作為藍(lán)本,將其中固定不變的部分作為靜態(tài)代碼框架部分,將其中需要變化的部分通過結(jié)合一定的標(biāo)記或生成語言改寫為可動(dòng)態(tài)替換的腳本,從而構(gòu)成代碼模板文件,再結(jié)合生成工具同數(shù)據(jù)源相作用,生成實(shí)際的程序代碼[1].盡管原理相似,但不同的代碼生成工具在具體實(shí)現(xiàn)技術(shù)上卻不盡相同,概括起來分為兩種類型:內(nèi)置模板型和可定制模板型.(1)內(nèi)置模板型:代碼的模板與生成工具是一體的,模板的格式和內(nèi)容都隱含在生成工具中,不能定制.這一類的生成工具如動(dòng)軟.Net代碼生成器,JAG-Java代碼生成器等.(2)可定制模板型:代碼的模板與生成工具分離,代碼生成工具提供一種標(biāo)記語言作為模板的編寫規(guī)則.用戶可通過標(biāo)記語言編寫代碼模板,從而滿足不同應(yīng)用平臺和應(yīng)用環(huán)境的需要.這一類的生成工具如CodeSmith,Freemarker,Velocity等.

對于以上兩種類型的代碼生成工具,內(nèi)置模板型由于將模板內(nèi)置在程序中,用戶不能定制模板和生成規(guī)則,其應(yīng)用環(huán)境非常有限,通用性也比較差.對于CodeSmith,Freemarker,Velocity等[2]可定制模板型生成工具.盡管功能強(qiáng)大,能滿足各種代碼生成需要,具備較強(qiáng)的通用性,但這些生成工具所支持的代碼生成控制語言要么基于一種實(shí)際的開發(fā)語言(如CodeSmith基于C#語言),要么基于一種通用解釋型語言,掌握語言本身就需要花費(fèi)大量的時(shí)間,同時(shí)這些語言同關(guān)系數(shù)據(jù)模型結(jié)合不緊密,往往編寫的模板代碼結(jié)構(gòu)復(fù)雜,難于維護(hù),也很難在軟件開發(fā)團(tuán)隊(duì)中得到快速的應(yīng)用.

2 基于關(guān)系數(shù)據(jù)模型的代碼生成原理

2.1設(shè)計(jì)思路通過上述代碼生成技術(shù)分析可知:如果能在保持可定制模板型代碼生成工具框架結(jié)構(gòu)基礎(chǔ)上,對其代碼生成控制語言進(jìn)行改進(jìn),采用一種與關(guān)系數(shù)據(jù)模型緊密結(jié)合的代碼生成控制語言,將可以保持生成工具通用性,并提高代碼生成工具的可用性.據(jù)此,我們對代碼生成工具的設(shè)計(jì)劃分為兩部分:(1)與關(guān)系數(shù)據(jù)模型緊密相關(guān)的代碼生成控制語言(以下稱RDM CodeMark語言)的設(shè)計(jì);(2)基于RDM CodeMark語言的代碼生成工具(以下簡稱RDM代碼生成工具)的設(shè)計(jì).

2.2 RDM代碼生成工具工作原理

圖1 RDM代碼生成工具結(jié)構(gòu)模型

2.2.1 RDM代碼生成工具結(jié)構(gòu)模型 RDM代碼生成工具在原理上仍是一種基于模板的代碼生成工具,具有該類型代碼生成工具的通用結(jié)構(gòu),具體實(shí)現(xiàn)上有特殊之處,圖1是RDM代碼生成工具組成模型:(1) 關(guān)系模型建模:對關(guān)系模型進(jìn)行的形式化描述,代表系統(tǒng)的關(guān)系模式信息,構(gòu)成RDM代碼生成器的輸入.模型可以采用Word文檔、運(yùn)行的數(shù)據(jù)庫以及UML文檔等;(2) RDM CodeMark語言:同關(guān)系數(shù)據(jù)模型相關(guān)的代碼生成控制語言,采用類XML語言的語法格式和迭代語義規(guī)則,用于編寫代碼模板文件中動(dòng)態(tài)代碼生成腳本;(3) 模板文件:采用RDM CodeMark語言編寫的代碼生成控制腳本文件(即RDM CodeMark語言程序),用于定義輸出代碼文件的創(chuàng)建信息和在生成文件中定制代碼內(nèi)容;(4) RDM代碼生成器:代碼生成工具核心程序,以關(guān)系模型建模作為輸入,執(zhí)行指定代碼模板文件,輸出生成后的代碼文件.主要由關(guān)系數(shù)據(jù)模型管理部件和代碼生成部件兩部分組成,其中關(guān)系數(shù)據(jù)模型管理部件用于將不同的外部關(guān)系模型建模導(dǎo)入后轉(zhuǎn)換到內(nèi)部標(biāo)準(zhǔn)關(guān)系模型對象集進(jìn)行維護(hù)和管理,為代碼生成部件提供一致的關(guān)系模型訪問接口.代碼生成部件則通過調(diào)入指定模板文件按照RDM CodeMark語言迭代語義規(guī)則執(zhí)行,在執(zhí)行過程中嵌入對關(guān)系數(shù)據(jù)模型對象集標(biāo)記的解析,最終生成實(shí)際程序代碼文件;(5) 代碼文件:實(shí)際生成代碼的輸出文件,是可以在項(xiàng)目系統(tǒng)中加入的可編譯源程序文件.

2.2.2 代碼生成工具工作過程 (1) 采用RDM CodeMark語言編寫代碼模板文件;(2) 采用word文檔、數(shù)據(jù)庫建庫工具或UML對關(guān)系模型建模;(3) 在RDM代碼生成器中導(dǎo)入關(guān)系模型建模,轉(zhuǎn)換為內(nèi)部統(tǒng)一關(guān)系數(shù)據(jù)模型對象集,并維護(hù)對象集信息的完整性;(4) 在RDM代碼生成器中選擇模板文件并執(zhí)行,生成目標(biāo)代碼輸出文件.

表1 表對象屬性及其標(biāo)記

3 基于關(guān)系數(shù)據(jù)模型的代碼生成技術(shù)

3.1關(guān)系數(shù)據(jù)模型對象集設(shè)計(jì)

關(guān)系數(shù)據(jù)模型對象集是對具體項(xiàng)目所設(shè)計(jì)的數(shù)據(jù)字典的統(tǒng)一對象化表示,構(gòu)成代碼生成部件的實(shí)際輸入支持對象.關(guān)系數(shù)據(jù)模型對象集由表集合、表、列集合、列對象組成,對應(yīng)關(guān)系數(shù)據(jù)模型中的元模型數(shù)據(jù).

表對象主要屬性及其在腳本中的代碼標(biāo)記如表1,列對象主要屬性及其在腳本中的代碼標(biāo)記如下表2.

表2 列對象屬性及其標(biāo)記

3.2 RDM CodeMark標(biāo)記語言RDM CodeMark標(biāo)記語言是結(jié)合關(guān)系數(shù)據(jù)模型設(shè)計(jì)的代碼標(biāo)記語言,在語法格式上接近XML語言,通過在代碼模板中嵌入標(biāo)記語言編寫的腳本程序,為代碼生成部件提供代碼生成控制.RDM CodeMark語言的語法成分分為三種類型:迭代控制語句、輸出控制語句和關(guān)系模型對象代碼標(biāo)記.

3.2.1 迭代控制語句

1) 表迭代語句TableLoop:執(zhí)行對所有的表進(jìn)行一次迭代展開.

語法格式:,其中:

(1) 對參加迭代的表進(jìn)行過濾,其語法為:

.

(2) 為迭代的表模板展開項(xiàng)之間提供分割符,語法為:.

2) 表檢查語句TableCheck:執(zhí)行表屬性檢查,滿足條件的,執(zhí)行對應(yīng)的模板.

語法格式為:,其中:

構(gòu)成判斷的條件部分,其語法為:

.

(3)列迭代語句ColumnLoop:對表中所有列進(jìn)行一次迭代展開.

語法格式為:

(4)列檢查語句ColumnCheck:執(zhí)行列屬性檢查,滿足條件的,執(zhí)行對應(yīng)的模板.

語法格式為:.

(5)調(diào)用腳本語句CallScript:將嵌入的模板腳本執(zhí)行,并引用其輸出.

語法格式為:.

(6) 腳本包含語句Using:將指定的模板文件嵌入到當(dāng)前文本中.

語法格式為:.

3.2.2 輸出控制語句 輸出控制語句只有一個(gè)OutputToFile語句,用于將迭代生成的文本寫入到指定文件中.在一個(gè)文本文件中多次使用則可控制生成多個(gè)文件.

語法格式為:

其中,用于提供程序文件的相對輸出路徑,語法為 .

3.2.3 關(guān)系模型對象代碼標(biāo)記 見表1和表2中各個(gè)對應(yīng)屬性的標(biāo)記語法部分.

3.3 RDM代碼生成腳本(模板)文件使用RDM CodeMark標(biāo)記語言編寫的腳本文件是一種特殊的解釋型代碼生成控制程序(簡稱RDM CodeMark腳本程序),能夠在對應(yīng)的翻譯器中控制執(zhí)行,以關(guān)系數(shù)據(jù)模型對象集作為輸入,動(dòng)態(tài)生成與關(guān)系數(shù)據(jù)模型相關(guān)的各種程序代碼.

RDM CodeMark腳本程序中文本分為兩類:RDM CodeMark標(biāo)記語言語法成分和普通文本.RDM CodeMark腳本翻譯器針對RDM CodeMark標(biāo)記語言語法成分進(jìn)行迭代解釋輸出,而對于普通文本則不做處理直接輸出.RDM CodeMark腳本程序的編寫規(guī)則取決于翻譯器的代碼生成規(guī)則,具體規(guī)則見4.2節(jié)代碼生成的算法.

RDM CodeMark腳本程序示例如下:

(1)用于生成對表進(jìn)行Insert操作的SQL語句,見圖2:

圖2 表的Insert操作模板腳本

(2).Net平臺下數(shù)據(jù)操作模型對象的生成實(shí)例,見下圖3:

圖3 .Net數(shù)據(jù)操作對象模板及代碼生成實(shí)例

4 RDM代碼生成工具實(shí)現(xiàn)

4.1 RDM代碼生成器的靜態(tài)類結(jié)構(gòu)RDM代碼生成器的靜態(tài)類設(shè)計(jì)可劃分為數(shù)據(jù)模型管理、數(shù)據(jù)模型導(dǎo)入,詞法解析,文件寫入,腳本迭代解析,代碼生成等不同職責(zé)的類集合.其對象關(guān)系見圖4.

圖4 RDM 代碼生成工具類結(jié)構(gòu)框架

數(shù)據(jù)模型管理類集合的作用是對關(guān)系數(shù)據(jù)模型的標(biāo)準(zhǔn)化表示和統(tǒng)一管理.由TableStandar-dModel、TableSet、Column-StandardModel、ColumnSet、DataModel-Catalog類構(gòu)成,分別對應(yīng)表標(biāo)準(zhǔn)模型類、表集合類、列標(biāo)準(zhǔn)模型類、列集合類、數(shù)據(jù)模型管理類.

數(shù)據(jù)模型導(dǎo)入類集合的作用是將外部各種形式的應(yīng)用系統(tǒng)關(guān)系數(shù)據(jù)模型設(shè)計(jì)轉(zhuǎn)換為內(nèi)部標(biāo)準(zhǔn)數(shù)據(jù)模型,IDataModelImporter是導(dǎo)入類的抽象接口,主要方法為 DataModel-Catalog ImportDataModel(),為所有具體的導(dǎo)入類提供統(tǒng)一的功能規(guī)約.DataBase-Importer、XMLImporter、DocImporter、UmlImpo-rter類實(shí)現(xiàn)IDataModel-Importer接口,對應(yīng)實(shí)現(xiàn)以數(shù)據(jù)庫系統(tǒng)、XML數(shù)據(jù)模型設(shè)計(jì)文檔、Word數(shù)據(jù)模型設(shè)計(jì)文檔和UML數(shù)據(jù)模型設(shè)計(jì)文檔作為源模型向標(biāo)準(zhǔn)數(shù)據(jù)模型的轉(zhuǎn)換.ScriptBuilder、FileWriter、CodeParser-Util類屬于工具類,分別實(shí)現(xiàn)腳本文件的構(gòu)造、腳本文件的輸出、腳本的語法成分解析,為模板文件的迭代生成提供底層支持.

腳本迭代解析類集合按照RDM CodeMark標(biāo)記語言的各個(gè)語句的語義要求,實(shí)現(xiàn)各種語句的腳本迭代解析,解析的過程就是局部生成目標(biāo)代碼的過程.所有語句解析類實(shí)現(xiàn)一個(gè)統(tǒng)一的腳本解析接口IScriptParser,其主要方法為string ParseScript(),實(shí)現(xiàn)腳本的迭代生成的功能規(guī)約.圖2中實(shí)現(xiàn)IScriptParser的各類分別對應(yīng)實(shí)現(xiàn)各個(gè)語句的語義迭代翻譯,限于篇幅此處不再詳述.RDMCodeGenerator類是代碼生成器的核心控制器類,以數(shù)據(jù)模型為輸入,執(zhí)行加載的模板文本,并生成最終的程序代碼.

4.2 RDM代碼生成的關(guān)鍵算法RDMCodeGenerator類的方法Generate()是生成目標(biāo)程序代碼的關(guān)鍵方法,該方法的執(zhí)行算法見下圖5的代碼生成序列圖.

圖5 代碼生成序列圖

圖6 采用Delphi實(shí)現(xiàn)的RDM代碼生成工具的主界面

4.3 RDM代碼生成器界面與功能按照RDM代碼生成工具的設(shè)計(jì),可以采用任意支持面向?qū)ο缶幊痰拈_發(fā)工具進(jìn)行實(shí)現(xiàn),圖6為采用Delphi實(shí)現(xiàn)的RDM代碼生成工具的主界面,其主要功能包括:數(shù)據(jù)模型設(shè)計(jì)文件的導(dǎo)入和編輯管理,模板文件的編輯和管理,模板的選擇與執(zhí)行管理,腳本的生成與輸出管理等.

5 RDM代碼生成工具應(yīng)用實(shí)例

RDM代碼生成工具可按照應(yīng)用系統(tǒng)數(shù)據(jù)模型設(shè)計(jì)快速生成應(yīng)用系統(tǒng)開發(fā)的基礎(chǔ)框架代碼,以“武漢大學(xué)本科生課程標(biāo)準(zhǔn)化考試系統(tǒng)”為例說明生成工具搭建系統(tǒng)框架程序的過程,如下圖7所示:

圖7 RDM代碼生成工具搭建系統(tǒng)框架程序?qū)?/p>

圖8 .Net中生成的項(xiàng)目解決方案圖示

過程說明:(1)采用word文檔將系統(tǒng)的數(shù)據(jù)模型設(shè)計(jì)進(jìn)行文檔化并導(dǎo)入工具中轉(zhuǎn)換為標(biāo)準(zhǔn)數(shù)據(jù)模型對象;(2)生成數(shù)據(jù)庫建庫腳本SQL文件,在MS SQL Server2005中執(zhí)行并創(chuàng)建數(shù)據(jù)庫;(3)按照.Net多層程序框架,依次生成應(yīng)用系統(tǒng)的Model層(模型層)、DAL層(數(shù)據(jù)存取層)、FacadeBLL層(基礎(chǔ)數(shù)據(jù)邏輯層)、UI層(基礎(chǔ)用戶界面層)代碼[3],見圖8;(4)在.Net開發(fā)工具VS2005中完成系統(tǒng)業(yè)務(wù)邏輯編程以及界面和程序的優(yōu)化.

在此項(xiàng)目的實(shí)踐中,大約70%的程序代碼編寫工作轉(zhuǎn)變?yōu)楣ぞ呱桑蟠筇岣吡讼到y(tǒng)開發(fā)的效率,增強(qiáng)了代碼的穩(wěn)定性.

6 結(jié)束語

通過采用RDM代碼生成工具,可以形成一套完整的程序開發(fā)模式.通過在WORD文檔或直接在軟件中建立系統(tǒng)數(shù)據(jù)模型,使用此生成工具可以生成從數(shù)據(jù)庫創(chuàng)建SQL腳本文件,到.Net或J2EE開發(fā)平臺上的各層直接可編譯代碼文件,從而大幅度簡化項(xiàng)目的代碼開發(fā)工作量.另通過在開發(fā)工具中增加對生成文檔和程序文件的自動(dòng)比對功能,則可識別出生成代碼中被維護(hù)的部分,從而在數(shù)據(jù)模型改變時(shí)可很快的遷移這部分修改,進(jìn)一步增強(qiáng)了代碼的可維護(hù)性.

當(dāng)然,本文所描述的關(guān)系數(shù)據(jù)模型只是一個(gè)簡化模型方案,若在此基礎(chǔ)上結(jié)合更多的數(shù)據(jù)模型特征或增加腳本語言的功能,則可進(jìn)一步提高生成代碼的質(zhì)量和生成工具的可適用性.

參考文獻(xiàn):

[1] 肖寒.J2EE平臺下代碼自動(dòng)生成技術(shù)研究[J].電腦知識與技術(shù),2009,5(20):5421-5422,5434.

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

[3] 陸遠(yuǎn),胡瑩..NET平臺下敏捷開發(fā)架構(gòu)及代碼生成技術(shù)[J].微計(jì)算機(jī)信息,2009(33):11-12,32.

[4] 楊美榮,史建鋒,李明星.基于MDA 的代碼生成器設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2009,35(12):47-49,53.

[5] 楊皓,楊忠,吳愚.基于XML腳本的代碼生成技術(shù)及其應(yīng)用[J].電腦知識與技術(shù),2009(7):7.

猜你喜歡
語言
詩之新,以語言創(chuàng)造為基
中華詩詞(2023年8期)2023-02-06 08:51:28
語言是刀
文苑(2020年4期)2020-05-30 12:35:30
讓語言描寫搖曳多姿
多向度交往對語言磨蝕的補(bǔ)正之道
累積動(dòng)態(tài)分析下的同聲傳譯語言壓縮
日常語言與播音語言
新聞傳播(2016年10期)2016-09-26 12:15:04
語言技能退化與語言瀕危
我有我語言
論語言的“得體”
語文知識(2014年10期)2014-02-28 22:00:56
Only Words慎用你的語言
主站蜘蛛池模板: 尤物视频一区| 免费视频在线2021入口| 女人一级毛片| 国产情精品嫩草影院88av| 天堂岛国av无码免费无禁网站| 久热re国产手机在线观看| 亚洲欧美人成电影在线观看| 亚洲欧美日韩另类在线一| 中文字幕在线日本| 亚洲色欲色欲www网| 国产中文一区二区苍井空| 动漫精品中文字幕无码| 久久综合九色综合97婷婷| 久久公开视频| 亚洲啪啪网| 一级一级一片免费| 国产成人永久免费视频| 国产黄色免费看| 国产女人18毛片水真多1| 国产在线97| lhav亚洲精品| 丰满少妇αⅴ无码区| 日本少妇又色又爽又高潮| 国产高清无码第一十页在线观看| 性69交片免费看| 精品人妻系列无码专区久久| 青草精品视频| 精品午夜国产福利观看| 国产情侣一区二区三区| 香蕉国产精品视频| 免费看美女自慰的网站| 青草午夜精品视频在线观看| 日韩二区三区| 亚洲大学生视频在线播放| 久久国产精品麻豆系列| av天堂最新版在线| 国产精品区视频中文字幕| aa级毛片毛片免费观看久| 日韩二区三区无| 国产资源免费观看| 精品人妻AV区| 永久免费无码成人网站| 国产成人精彩在线视频50| 亚洲日本韩在线观看| 午夜激情婷婷| 国产精品久久自在自2021| 国产成人免费手机在线观看视频 | 精品无码一区二区三区在线视频| 欧美a在线视频| 亚洲精品无码高潮喷水A| 色婷婷久久| 国产成人免费视频精品一区二区| 亚洲资源站av无码网址| 99热最新网址| 国产噜噜噜| 老熟妇喷水一区二区三区| 污网站在线观看视频| 国产一区二区三区精品欧美日韩| 国产99在线观看| 欧洲免费精品视频在线| 欧美精品啪啪一区二区三区| 精品伊人久久久久7777人| 久久99热66这里只有精品一| 国产综合色在线视频播放线视| 欧美成人精品在线| 青青操视频在线| 99久久亚洲综合精品TS| 精品91视频| 视频一区视频二区日韩专区| 国产成人久久777777| 香蕉国产精品视频| 五月婷婷亚洲综合| 2020亚洲精品无码| 久久久久免费看成人影片| 视频二区国产精品职场同事| 午夜福利视频一区| 成人亚洲国产| 国产日韩欧美精品区性色| 中美日韩在线网免费毛片视频 | 亚洲va欧美va国产综合下载| 午夜三级在线| 国产女主播一区|