吉基兵
江蘇省南京市第十三中學(xué) 江蘇南京 210008
☆現(xiàn)代教育技術(shù)應(yīng)用☆
感受代碼生成之美
吉基兵
江蘇省南京市第十三中學(xué) 江蘇南京 210008
在信息技術(shù)教學(xué)中,有些問題常常必須通過程序才能完成這項(xiàng)工作,然而對(duì)大多數(shù)一線教師來說,編寫程序是一件痛苦的事情。那有什么辦法來解決呢?使用代碼生成。代碼生成技術(shù)已經(jīng)非常成熟了,網(wǎng)上有各種各樣的代碼生成工具。本文從什么是代碼生成技術(shù)開始,分析了常規(guī)開發(fā)面臨的問題,使用代碼生成器有哪些好處?介紹了幾款常見的代碼生成器,重點(diǎn)介紹了CodeSmith的使用,感受代碼生成之美。使用代碼生成工具,我們可以快速生成代碼,進(jìn)而編寫出符合實(shí)際需要的軟件。
代碼生成就是利用工具或程序,通過簡(jiǎn)單配置,快速生成程序代碼、數(shù)據(jù)庫腳本、數(shù)據(jù)字典等的編碼方式。代碼生成通常與數(shù)據(jù)庫相關(guān)項(xiàng)目聯(lián)系在一起。通過簡(jiǎn)單配置,可以快速生成增刪改查、分頁等基礎(chǔ)處理類庫,甚至UI頁面也可生成,整個(gè)過程無需編碼。生成的代碼風(fēng)格統(tǒng)一,無需測(cè)試。
代碼大量重復(fù)。在程序開發(fā)過程當(dāng)中,程序員會(huì)經(jīng)常做著重復(fù)性的工作,最常見的是訪問數(shù)據(jù)庫,程序員要經(jīng)常編寫增、刪、改、分頁之類的操作。為了避免這個(gè)問題,節(jié)省大量機(jī)械錄入的時(shí)間和重復(fù)勞動(dòng),提高工作效率,而將精力集中于核心業(yè)務(wù)邏輯的開發(fā)。一個(gè)適合于自己使用的代碼生成器顯得非常重要。
項(xiàng)目嚴(yán)重超期。越來越多的壓力使得一個(gè)軟件項(xiàng)目無論是最終用戶、企業(yè)、開發(fā)團(tuán)隊(duì)都希望在最短的時(shí)間完成,可事與愿違的是軟件項(xiàng)目的時(shí)間延期問題普遍存在,一些調(diào)查表明,70%的項(xiàng)目超出了估算的時(shí)間。大型項(xiàng)目平均超出計(jì)劃交付時(shí)間的20%到50%,項(xiàng)目越大,超出計(jì)劃的時(shí)間越長(zhǎng)。一直以來開發(fā)速度的問題都是軟件開發(fā)業(yè)的頭等問題。那怎樣才能在保證軟件質(zhì)量的同時(shí)又縮短開發(fā)速度呢?
編碼效率高??梢栽?分鐘內(nèi)生成幾萬行代碼,把人從重復(fù)勞動(dòng)解放出來,用更多的精力去關(guān)注更核心的業(yè)務(wù)邏輯,系統(tǒng)的優(yōu)化;代碼質(zhì)量高。因?yàn)榇a都是一個(gè)生成器模板生成出來的,代碼風(fēng)格一致,便于以后維護(hù)。
(1)IBM Rational Rose
Rose實(shí)際上一個(gè)建模工具,但具有代碼生成功能。
Rational Rose是一個(gè)完全的,具有能滿足所有建模環(huán)境(Web開發(fā),數(shù)據(jù)建模,Visual Studio和C++ )需求能力和靈活性的一套解決方案。Rose允許開發(fā)人員、項(xiàng)目經(jīng)理、系統(tǒng)工程師和分析人員在軟件開發(fā)周期內(nèi)在將需求和系統(tǒng)的體系架構(gòu)轉(zhuǎn)換成代碼,消除浪費(fèi)的消耗,對(duì)需求和系統(tǒng)的體系架構(gòu)進(jìn)行可視化、理解和精練。通過在軟件開發(fā)周期內(nèi)使用同一種建模工具可以確保更快更好的創(chuàng)建滿足客戶需求的可擴(kuò)展的、靈活的并且可靠的應(yīng)用系統(tǒng)。
(2)Sybase Power Designer
PowerDesigner實(shí)際上一個(gè)建模工具,但具有代碼生成功能。
PowerDesigner是Sybase公司的CASE工具集,使用它可以方便地對(duì)管理信息系統(tǒng)進(jìn)行分析設(shè)計(jì),它幾乎包括了數(shù)據(jù)庫模型設(shè)計(jì)的全過程。利用PowerDesigner可以制作數(shù)據(jù)流程圖、概念數(shù)據(jù)模型、物理數(shù)據(jù)模型,可以生成多種客戶端開發(fā)工具的應(yīng)用程序,還可為數(shù)據(jù)倉(cāng)庫制作結(jié)構(gòu)模型,也能對(duì)團(tuán)隊(duì)設(shè)備模型進(jìn)行控制。
Sybase PowerDesigner還是一個(gè)“一站式”的企業(yè)級(jí)建模及設(shè)計(jì)解決方案,它能幫助企業(yè)快速高效地進(jìn)行企業(yè)應(yīng)用系統(tǒng)構(gòu)建及再工程(Re- engineer)。IT專業(yè)人員可以利用它來有效開發(fā)各種解決方案,從定義業(yè)務(wù)需求到分析和設(shè)計(jì),以至集成所有現(xiàn)代RDBMS和Java、.NET、PowerBuilder和Web Services的開發(fā)等。PowerDesigner是結(jié)合了下列幾種標(biāo)準(zhǔn)建模技術(shù)的一款獨(dú)具特色的建模工具集:業(yè)務(wù)流程建模、通過UML進(jìn)行的應(yīng)用程序建模以及市場(chǎng)占有率第一的數(shù)據(jù)建模,這些建模技術(shù)都是由功能強(qiáng)大的元數(shù)據(jù)管理解決方案提供支持的。
(3)動(dòng)軟.Net代碼生成器
動(dòng)軟.Net代碼生成器是一款為C#數(shù)據(jù)庫程序員設(shè)計(jì)的自動(dòng)代碼生成器,Codematic生成的代碼基于面向?qū)ο蟮乃枷牒腿龑蛹軜?gòu)設(shè)計(jì),結(jié)合了Petshop中經(jīng)典的思想和設(shè)計(jì)模式,融入了工廠模式,反射機(jī)制等等一些思想。主要實(shí)現(xiàn)在對(duì)應(yīng)數(shù)據(jù)庫中表的基類代碼的自動(dòng)生成,包括生成屬性、添加、修改、刪除、查詢、存在性、Model類構(gòu)造等基礎(chǔ)代碼片斷,支持不同3種架構(gòu)代碼生成。
(4)ASP.NET Maker
ASPMaker是一款自動(dòng)化的ASP代碼產(chǎn)生工具,它提供了一種方便快捷的可視化操作環(huán)境,使用者即使沒有任何的網(wǎng)絡(luò)編程經(jīng)驗(yàn),只要提供 Microsoft Access數(shù)據(jù)庫或是ODBC數(shù)據(jù)源,就可以在五步之內(nèi)快速地自動(dòng)生成一整套ASP(Active Server Pages)程序。利用產(chǎn)生的ASP代碼,用戶能夠在Web上容易地查看、編輯、搜索、加入和刪除數(shù)據(jù)庫記錄。ASPMaker具有高度的靈活性,幾個(gè)選項(xiàng)使你能夠產(chǎn)生最符合你需求的ASP應(yīng)用程序。產(chǎn)生的代碼是干凈的、直接的并易于定制。
ASP.NET Maker是一套非常容易使用的代碼生成工具,同ASPMaker一樣,它能快速地根據(jù)數(shù)據(jù)庫連接資料來源中生成一套完整的ASP.NET程序。
它支持以下數(shù)據(jù)庫:Microsoft Access、Microsoft SQL Server、Oracle、或任何具 ADO 或ODBC 連接的數(shù)據(jù)庫。
(5)CodeSmith
CodeSmith一款國(guó)際知名度最高的基于模板的代碼生成器,模板采用類似C#的腳本語言。
它主要特點(diǎn)在于模板的定制能力強(qiáng),你完全可以像使用C#語言開發(fā)程序一樣,編寫屬于自己的模板。如果嫌麻煩,在網(wǎng)上完全可以找到想要的模板,稍加修改就可以變成適合自己的了。你一些ORM(NHibernate、IBatis、LINQ)、三層架構(gòu)(Petshop、NTiers)、數(shù)據(jù)庫(分頁、 CRUD存儲(chǔ)過程、生成基礎(chǔ)數(shù)據(jù))、架構(gòu)(CSLA.NET)、Ajax等等。幾乎覆蓋了所有應(yīng)用,可以說“只有想不到,沒有做不到”。
網(wǎng)上有很多共享的模板,其中.NetTiers尤為著名。
本文以CodeSmith為例,結(jié)合.NetTiers模板來介紹代碼生成工具的使用。首先從網(wǎng)上下載CodeSmith,當(dāng)前最新的版本為:5.2。參照以下流程安裝,如圖1所示。
圖 1
如果需要將CodeSmith集成到VSTS(Visual Studio Team Suite)中,安裝CodeSmith之前最好先安裝VSTS,如圖2所示。
圖 2
安裝完畢得到兩個(gè)應(yīng)用程序:CodeSmith Studio和CodeSmith Explorer,CodeSmith Explorer是知識(shí)模板瀏覽器,可內(nèi)嵌在CodeSmith Studio、VSTS中,CodeSmith Studio是CodeSmith的集成開發(fā)環(huán)境可以編輯模板文件。
下面我們使用.NetTiers模板,連接數(shù)據(jù)庫,設(shè)置相關(guān)參數(shù)來生成項(xiàng)目代碼,學(xué)習(xí)CodeSmith的使用方法。工作流程,如圖3所示:
圖 3
CodeSmith是基于模板文件來工作的,模板可是自行編寫,也可以“拿來主義”。CodeSmith已經(jīng)內(nèi)置了許多模板文件,其他模板文件在使用之前,需要組織到CodeSmith中來,這就是在CodeSmith中為模板文件夾添加快捷方式,方法如下:
(1)在打開CodeSmith,找到Explorer面板。
(2)單擊面板上的按鈕,瀏覽到.NetTiers模板文件所在目錄。
(1)在CodeSmith中連接數(shù)據(jù)庫之前,假定您的數(shù)據(jù)庫已經(jīng)部署并建立完成。圖4是我們演示的數(shù)據(jù)庫表結(jié)構(gòu)。
圖 4
(2)從菜單中執(zhí)行命令“View-Schema Explorer”打開數(shù)據(jù)庫連接管理面板。
(3)在Schema Explorer面板中,單擊按鈕“Manager Data Source ”打開“Data Source Manger”對(duì)話框。
(4)在“Data Source Manager”對(duì)話框中,單擊“Add”,打開“Data Source”數(shù)據(jù)源設(shè)置對(duì)話框。
(5)在數(shù)據(jù)源設(shè)置對(duì)話框中,填寫“name(連接別名)”參數(shù),選擇“Provider Type(數(shù)據(jù)庫連接提供程序)”類型,本例使用Sql Server,所以選擇“SqlSchemaProvider”,最后單擊“Connection String:”后面的“…”按鈕,填寫數(shù)據(jù)庫連接信息。
(6)在“Connection Properties”對(duì)話框中填寫SQL Server服務(wù)器地址,登錄賬號(hào)信息,選擇要連接的數(shù)據(jù)庫;單擊“OK”返回。
(7)返回后,連接字符串已經(jīng)自動(dòng)生成。
(8)可以單擊“Test”測(cè)試數(shù)據(jù)庫連接,確保成功。
(9)測(cè)試成功,返回“Data Source Manger”對(duì)話框,可以看到剛才添加的別名“demo”已經(jīng)出現(xiàn)在列表中。單擊“Close”返回。
(10)在“Schema Explorer”中也有了剛才建立的連接。
(1)打開“CodeSmith Explorer”,或者在CodeSmith中,找到“Template Explorer”面板,依次展開“CodeSmith 5.2 Samples-Frameworks-NetTiers”,找到“NetTiers.cst”模板文件。
(2)在“NetTiers.cst”模板文件上右擊,彈出菜單,選擇“Execute”執(zhí)行該模板文件。
(3)彈出該模板的屬性設(shè)置窗口,如圖5所示。
圖 5
(4)首先設(shè)置數(shù)據(jù)源,單擊“Choose SourceDatabase”選項(xiàng)后面的按鈕“…”,彈出數(shù)據(jù)源選擇對(duì)話框
(5)設(shè)置好數(shù)據(jù)源后,暫時(shí)只要設(shè)置“MappingFile(映射文件路徑)”和“OutputDirectory(代碼生成輸出目錄)”兩個(gè)選項(xiàng)即可,如果需要特殊設(shè)置,可以設(shè)置其他選項(xiàng)。
(1)參數(shù)設(shè)置完畢,單擊窗口下部的“Generate”按鈕開始生成代碼,如圖6所示。
圖 6
(2)任務(wù)執(zhí)行完畢,會(huì)自動(dòng)彈出任務(wù)執(zhí)行報(bào)告。報(bào)告中包括:任務(wù)執(zhí)行匯總信息、項(xiàng)目使用配置信息、API使用案例、生成代碼詳細(xì)信息。
(3)模板輸出信息如下,可以看到項(xiàng)目代碼生成在指定目錄。
Generation complete. Execution time:00:00:07.7311168
You can view current documentation @http://docs.netTiers.com
Generated solution can be found here:
file:\D:NetTiersDemoDemo.sln
(4)打開輸出目錄,可以看到生成的解決方案和項(xiàng)目。
(1)在VSTS中打開解決方案“demo.sln”,選中“*.WebSite”網(wǎng)站項(xiàng)目,設(shè)置為啟動(dòng)項(xiàng)目。按“Ctrl+F5”執(zhí)行,瀏覽測(cè)試網(wǎng)站。
(2)彈出網(wǎng)站默認(rèn)頁面,5秒鐘后將會(huì)自動(dòng)轉(zhuǎn)向管理后臺(tái),左側(cè)是所有的數(shù)據(jù)表,單擊任一表名可以查看該表中的數(shù)據(jù)。
(3)單擊下面的“Add New”按鈕可以對(duì)該表添加新記錄,如圖7所示。
圖 7
(1)在網(wǎng)站根目錄建立頁面:“Reg.aspx”。
(2)打開“~/Admin/TUserEdit.aspx”頁面代碼,拷貝如圖8選中部分代碼。
圖 8
代碼參考(僅參考,實(shí)際可能不同)如下:
(3)打開“~/Reg.aspx”頁面代碼,在“”之間插入上一步拷貝的代碼。
(4)打開“~/Admin/TUserEdit.aspx”后臺(tái)代碼,拷貝如下部分代碼。
(5)打開“~/Reg.aspx”后臺(tái)代碼,將如下圖選中的命名空間替換為上一步拷貝的代碼。
(6)參照以下幾步修改代碼。
a.打開“~/Reg.aspx”頁面代碼,在“
b. 刪除如下代碼,表示刪除“Update”按鈕。
圖 9
(8)用戶可以注冊(cè)了,大功告成。
[1] Peter Vogel.Practical Code Generation in .NET[M].美國(guó):Addison-Wesley Professional, 2010.
[2] Kathleen Dollard. Code Generation in Microsoft .NET[M].美國(guó):Apress. 2004
吉基兵,教育碩士,中教一級(jí)。