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

 

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

工具備好和壞、適用和不適用之分。好比當你只是須要看一看文本文件的內容時,那麼 Notepad 就是一個很好的工具。可是有些人不辨好歹,盲目地「以不變應萬變」,「只用 NotePad 徹底手寫代碼」而且以此爲榮,「實乃兵家之大忌」。編程

閒話少說,言歸正傳。網絡

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

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

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

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

基於模板的代碼生成方式又能夠分爲:基於標記的和基於編程的。工具

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

基於編程的方式很像 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+

鏈接串編輯器

×

篩選表、字段、關係

×

×

表、字段、關係別名

×

合併數據架構

×

×

定義模板參數

定義模板界面

×

 

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

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

相關文章
相關標籤/搜索