吉基兵
江蘇省南京市第十三中學 江蘇南京 210008
☆現代教育技術應用☆
感受代碼生成之美
吉基兵
江蘇省南京市第十三中學 江蘇南京 210008
在信息技術教學中,有些問題常常必須通過程序才能完成這項工作,然而對大多數一線教師來說,編寫程序是一件痛苦的事情。那有什么辦法來解決呢?使用代碼生成。代碼生成技術已經非常成熟了,網上有各種各樣的代碼生成工具。本文從什么是代碼生成技術開始,分析了常規開發面臨的問題,使用代碼生成器有哪些好處?介紹了幾款常見的代碼生成器,重點介紹了CodeSmith的使用,感受代碼生成之美。使用代碼生成工具,我們可以快速生成代碼,進而編寫出符合實際需要的軟件。
代碼生成就是利用工具或程序,通過簡單配置,快速生成程序代碼、數據庫腳本、數據字典等的編碼方式。代碼生成通常與數據庫相關項目聯系在一起。通過簡單配置,可以快速生成增刪改查、分頁等基礎處理類庫,甚至UI頁面也可生成,整個過程無需編碼。生成的代碼風格統一,無需測試。
代碼大量重復。在程序開發過程當中,程序員會經常做著重復性的工作,最常見的是訪問數據庫,程序員要經常編寫增、刪、改、分頁之類的操作。為了避免這個問題,節省大量機械錄入的時間和重復勞動,提高工作效率,而將精力集中于核心業務邏輯的開發。一個適合于自己使用的代碼生成器顯得非常重要。
項目嚴重超期。越來越多的壓力使得一個軟件項目無論是最終用戶、企業、開發團隊都希望在最短的時間完成,可事與愿違的是軟件項目的時間延期問題普遍存在,一些調查表明,70%的項目超出了估算的時間。大型項目平均超出計劃交付時間的20%到50%,項目越大,超出計劃的時間越長。一直以來開發速度的問題都是軟件開發業的頭等問題。那怎樣才能在保證軟件質量的同時又縮短開發速度呢?
編碼效率高。可以在1分鐘內生成幾萬行代碼,把人從重復勞動解放出來,用更多的精力去關注更核心的業務邏輯,系統的優化;代碼質量高。因為代碼都是一個生成器模板生成出來的,代碼風格一致,便于以后維護。
(1)IBM Rational Rose
Rose實際上一個建模工具,但具有代碼生成功能。
Rational Rose是一個完全的,具有能滿足所有建模環境(Web開發,數據建模,Visual Studio和C++ )需求能力和靈活性的一套解決方案。Rose允許開發人員、項目經理、系統工程師和分析人員在軟件開發周期內在將需求和系統的體系架構轉換成代碼,消除浪費的消耗,對需求和系統的體系架構進行可視化、理解和精練。通過在軟件開發周期內使用同一種建模工具可以確保更快更好的創建滿足客戶需求的可擴展的、靈活的并且可靠的應用系統。
(2)Sybase Power Designer
PowerDesigner實際上一個建模工具,但具有代碼生成功能。
PowerDesigner是Sybase公司的CASE工具集,使用它可以方便地對管理信息系統進行分析設計,它幾乎包括了數據庫模型設計的全過程。利用PowerDesigner可以制作數據流程圖、概念數據模型、物理數據模型,可以生成多種客戶端開發工具的應用程序,還可為數據倉庫制作結構模型,也能對團隊設備模型進行控制。
Sybase PowerDesigner還是一個“一站式”的企業級建模及設計解決方案,它能幫助企業快速高效地進行企業應用系統構建及再工程(Re- engineer)。IT專業人員可以利用它來有效開發各種解決方案,從定義業務需求到分析和設計,以至集成所有現代RDBMS和Java、.NET、PowerBuilder和Web Services的開發等。PowerDesigner是結合了下列幾種標準建模技術的一款獨具特色的建模工具集:業務流程建模、通過UML進行的應用程序建模以及市場占有率第一的數據建模,這些建模技術都是由功能強大的元數據管理解決方案提供支持的。
(3)動軟.Net代碼生成器
動軟.Net代碼生成器是一款為C#數據庫程序員設計的自動代碼生成器,Codematic生成的代碼基于面向對象的思想和三層架構設計,結合了Petshop中經典的思想和設計模式,融入了工廠模式,反射機制等等一些思想。主要實現在對應數據庫中表的基類代碼的自動生成,包括生成屬性、添加、修改、刪除、查詢、存在性、Model類構造等基礎代碼片斷,支持不同3種架構代碼生成。
(4)ASP.NET Maker
ASPMaker是一款自動化的ASP代碼產生工具,它提供了一種方便快捷的可視化操作環境,使用者即使沒有任何的網絡編程經驗,只要提供 Microsoft Access數據庫或是ODBC數據源,就可以在五步之內快速地自動生成一整套ASP(Active Server Pages)程序。利用產生的ASP代碼,用戶能夠在Web上容易地查看、編輯、搜索、加入和刪除數據庫記錄。ASPMaker具有高度的靈活性,幾個選項使你能夠產生最符合你需求的ASP應用程序。產生的代碼是干凈的、直接的并易于定制。
ASP.NET Maker是一套非常容易使用的代碼生成工具,同ASPMaker一樣,它能快速地根據數據庫連接資料來源中生成一套完整的ASP.NET程序。
它支持以下數據庫:Microsoft Access、Microsoft SQL Server、Oracle、或任何具 ADO 或ODBC 連接的數據庫。
(5)CodeSmith
CodeSmith一款國際知名度最高的基于模板的代碼生成器,模板采用類似C#的腳本語言。
它主要特點在于模板的定制能力強,你完全可以像使用C#語言開發程序一樣,編寫屬于自己的模板。如果嫌麻煩,在網上完全可以找到想要的模板,稍加修改就可以變成適合自己的了。你一些ORM(NHibernate、IBatis、LINQ)、三層架構(Petshop、NTiers)、數據庫(分頁、 CRUD存儲過程、生成基礎數據)、架構(CSLA.NET)、Ajax等等。幾乎覆蓋了所有應用,可以說“只有想不到,沒有做不到”。
網上有很多共享的模板,其中.NetTiers尤為著名。
本文以CodeSmith為例,結合.NetTiers模板來介紹代碼生成工具的使用。首先從網上下載CodeSmith,當前最新的版本為:5.2。參照以下流程安裝,如圖1所示。

圖 1
如果需要將CodeSmith集成到VSTS(Visual Studio Team Suite)中,安裝CodeSmith之前最好先安裝VSTS,如圖2所示。

圖 2
安裝完畢得到兩個應用程序:CodeSmith Studio和CodeSmith Explorer,CodeSmith Explorer是知識模板瀏覽器,可內嵌在CodeSmith Studio、VSTS中,CodeSmith Studio是CodeSmith的集成開發環境可以編輯模板文件。
下面我們使用.NetTiers模板,連接數據庫,設置相關參數來生成項目代碼,學習CodeSmith的使用方法。工作流程,如圖3所示:

圖 3
CodeSmith是基于模板文件來工作的,模板可是自行編寫,也可以“拿來主義”。CodeSmith已經內置了許多模板文件,其他模板文件在使用之前,需要組織到CodeSmith中來,這就是在CodeSmith中為模板文件夾添加快捷方式,方法如下:
(1)在打開CodeSmith,找到Explorer面板。
(2)單擊面板上的按鈕,瀏覽到.NetTiers模板文件所在目錄。
(1)在CodeSmith中連接數據庫之前,假定您的數據庫已經部署并建立完成。圖4是我們演示的數據庫表結構。

圖 4
(2)從菜單中執行命令“View-Schema Explorer”打開數據庫連接管理面板。
(3)在Schema Explorer面板中,單擊按鈕“Manager Data Source ”打開“Data Source Manger”對話框。
(4)在“Data Source Manager”對話框中,單擊“Add”,打開“Data Source”數據源設置對話框。
(5)在數據源設置對話框中,填寫“name(連接別名)”參數,選擇“Provider Type(數據庫連接提供程序)”類型,本例使用Sql Server,所以選擇“SqlSchemaProvider”,最后單擊“Connection String:”后面的“…”按鈕,填寫數據庫連接信息。
(6)在“Connection Properties”對話框中填寫SQL Server服務器地址,登錄賬號信息,選擇要連接的數據庫;單擊“OK”返回。
(7)返回后,連接字符串已經自動生成。
(8)可以單擊“Test”測試數據庫連接,確保成功。
(9)測試成功,返回“Data Source Manger”對話框,可以看到剛才添加的別名“demo”已經出現在列表中。單擊“Close”返回。
(10)在“Schema Explorer”中也有了剛才建立的連接。
(1)打開“CodeSmith Explorer”,或者在CodeSmith中,找到“Template Explorer”面板,依次展開“CodeSmith 5.2 Samples-Frameworks-NetTiers”,找到“NetTiers.cst”模板文件。
(2)在“NetTiers.cst”模板文件上右擊,彈出菜單,選擇“Execute”執行該模板文件。
(3)彈出該模板的屬性設置窗口,如圖5所示。

圖 5
(4)首先設置數據源,單擊“Choose SourceDatabase”選項后面的按鈕“…”,彈出數據源選擇對話框
(5)設置好數據源后,暫時只要設置“MappingFile(映射文件路徑)”和“OutputDirectory(代碼生成輸出目錄)”兩個選項即可,如果需要特殊設置,可以設置其他選項。
(1)參數設置完畢,單擊窗口下部的“Generate”按鈕開始生成代碼,如圖6所示。

圖 6
(2)任務執行完畢,會自動彈出任務執行報告。報告中包括:任務執行匯總信息、項目使用配置信息、API使用案例、生成代碼詳細信息。
(3)模板輸出信息如下,可以看到項目代碼生成在指定目錄。
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)打開輸出目錄,可以看到生成的解決方案和項目。
(1)在VSTS中打開解決方案“demo.sln”,選中“*.WebSite”網站項目,設置為啟動項目。按“Ctrl+F5”執行,瀏覽測試網站。
(2)彈出網站默認頁面,5秒鐘后將會自動轉向管理后臺,左側是所有的數據表,單擊任一表名可以查看該表中的數據。
(3)單擊下面的“Add New”按鈕可以對該表添加新記錄,如圖7所示。

圖 7
(1)在網站根目錄建立頁面:“Reg.aspx”。
(2)打開“~/Admin/TUserEdit.aspx”頁面代碼,拷貝如圖8選中部分代碼。

圖 8
代碼參考(僅參考,實際可能不同)如下:

(3)打開“~/Reg.aspx”頁面代碼,在“”之間插入上一步拷貝的代碼。
(4)打開“~/Admin/TUserEdit.aspx”后臺代碼,拷貝如下部分代碼。


(5)打開“~/Reg.aspx”后臺代碼,將如下圖選中的命名空間替換為上一步拷貝的代碼。
(6)參照以下幾步修改代碼。
a.打開“~/Reg.aspx”頁面代碼,在“

b. 刪除如下代碼,表示刪除“Update”按鈕。


圖 9
(8)用戶可以注冊了,大功告成。
[1] Peter Vogel.Practical Code Generation in .NET[M].美國:Addison-Wesley Professional, 2010.
[2] Kathleen Dollard. Code Generation in Microsoft .NET[M].美國:Apress. 2004
吉基兵,教育碩士,中教一級。