代碼生成工具的分類及比較

 

中國有句古語叫做“工欲善其事,必先利其器”,用通俗的話來說就是“磨刀不誤砍柴功”,古人的這些話告訴我們:要把事情做好,事先應該準備合適的工具。工具不僅僅包括器具,還包括思想、理論、經驗、道德、法律等一切能解決問題的有形和無形的東西。

工具有好和壞、適用和不適用之分。比如當你只是需要看一看文本文件的內容時,那麼 Notepad 就是一個很好的工具。但是有些人不辨好歹,盲目地“以不變應萬變”,“只用 NotePad 完全手寫代碼”並且以此爲榮,“實乃兵家之大忌”。

閒話少說,言歸正傳。

在你需要一些重複或者相似的代碼時,就應該準備好一款名叫“代碼生成器”的利器。說到代碼生成器,很多人誤以爲它只能生成程序代碼。其實一款靈活的代碼生成器還能夠生成報表、幫助等一切文本或基於文本的文件(比如 CHM);好的代碼生成器的數據來源不僅僅是數據庫架構,也可以是數據庫數據,還可以是 XML 等其它數據。

代碼生成器根據生成邏輯的存儲方式可以分爲兩種:程序固化的和基於模板的。

程序固化的方式將生成代碼的邏輯存儲在生成器中,一般是通過編寫一些字符串的串連代碼,這些代碼在運行時生成用戶的代碼。

基於模板的方式將生成代碼的邏輯存儲在生成器之外的模板文件中,用戶可以根據實際需要修改相應的模板,或者自行開發合適的模板。

基於模板的代碼生成方式又可以分爲:基於標記的和基於編程的。

基於標記的方式定義一套標記規則,在模板中按需插入特定的標記,當這些模板被生成器調用時,標記就被替換爲相應的內容,類似於宏替換。

基於編程的方式很像 ASP/JSP/PHP,它採用一種編程語言(或在多種中選擇一種),將程序代碼和文本代碼混合在一起,並通過一定的標記(比如<%%>)來區分。這類模板其實就是一個應用程序,它運行的結果就是用戶需要的代碼。

下面我們來看看這幾種生成方式的比較,首先從開發商的角度來看:

 

項目\類型

程序固化

基於模板

基於標記

基於編程

生成邏輯

在生成工具中

在模板文件中

在模板文件中

開發難度

適中

可維護性

維護成本

 

再從用戶的角度進行對比:

 

項目\類型

程序固化

基於模板

基於標記

基於編程

方便性

擴展性

差,用戶無法自己定製

好,用戶可以按需定製

好,用戶可以按需定製

適應性

好,但無法適應複雜情況

很好

定製成本

無法定製

需要學習一套標記規則

需要學習模板編程規則

 

目前網絡上比較有影響的代碼生成工具都採用基於編程的模板技術。

網絡上還有一些號稱也是“基於模板”的代碼生成器,也將代碼生成邏輯存儲在“模板文件”中,在“模板文件”中通過編寫一系列的程序代碼將字符串串連起來,既不是採用標記的方式,也不是採用類 ASP/JSP/PHP 的方式,其本質上和程序固化的方式並無區別,因此不在本文討論之列。

下面我將列舉三種具有代表性的代碼生成器進行對比,對比的內容均來自官方網站或其文檔,供大家選擇時參考。

    MyGeneration :在 download.com 上保持下載量第一的 .NET 開發工具。

    CodeSmith :獲得 aspnetpro.com 用戶評選的最佳工具獎。

    CodeAuto :最具發展潛力的代碼生成工具。

 

項目\軟件

MyGeneration

CodeSmith Pro

CodeAuto

性質

免費

×

源代碼

×

×

模板

ASP語法

模板語言

C#,JScript,

VB.NET,VBScript

C#,VB.NET,

JScript

Nuva

IDE

CodeAuto Studio

支持命令行

Visual Studio 集成

×

×

已有模板數量

很多

11

架構

支持數據庫種類

12

1+

5+

連接串編輯器

×

篩選表、字段、關係

×

×

表、字段、關係別名

×

合併數據架構

×

×

定義模板參數

定義模板界面

×

 

架構(表、字段、關係等)篩選的重要性:一般的應用都會劃分爲幾個不同的部分,每部分一般對應到不同的表(一般會有所重疊),按照應用的不同將數據庫架構劃分爲相應的子架構,更有利於開發、管理和維護。

設置別名的重要性:有時表名、字段名等由於種種原因(比如國內的一些系統經常用拼音縮寫,從一個拼音縮寫反推原來的名稱真是比翻譯天書還難)不符合實際時,別名能使之更易讀,更準確

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章