CodeSmith 概述

2018-08-12 21:16 更新

概述

前面正在介紹 hibernate 的開(kāi)發(fā)教程,提到 hibernate 在 .Net 平臺(tái)上相應(yīng)的 ORM 工具為NHibernate,使用 NHibernate 就不能不提到 CodeSmith。

CodeSmith 是一種基于模板的代碼生成工具,它使用類似于 ASP.NET 的語(yǔ)法來(lái)生成任意類型的代碼或文本。與其他許多代碼生成工具不同,CodeSmith 不要求您訂閱特定的應(yīng)用程序設(shè)計(jì)或體系結(jié)構(gòu)。使用 CodeSmith,可以生成包括簡(jiǎn)單的強(qiáng)類型集合和完整應(yīng)用程序在內(nèi)的任何東西。當(dāng)您生成應(yīng)用程序時(shí),您經(jīng)常需要重復(fù)完成某些特定的任務(wù),例如編寫(xiě)數(shù)據(jù)訪問(wèn)代碼或者生成自定義集合。CodeSmith 在這些時(shí)候特別有用,因?yàn)槟梢跃帉?xiě)模板自動(dòng)完成這些任務(wù),從而不僅提高您的工作效率,而且能夠自動(dòng)完成那些最為乏味的任務(wù)。CodeSmith 附帶了許多模板,包括對(duì)應(yīng)于所有 .NET 集合類型的模板以及用于生成存儲(chǔ)過(guò)程的模板,但該工具的真正威力在于能夠創(chuàng)建自定義模板。

CodeSmith 可以從網(wǎng)站 http://www.codesmithtools.com/ 下載,個(gè)人開(kāi)發(fā)版費(fèi)用在300美元左右,個(gè)人認(rèn)為還是物有所值。

還是用一個(gè)例子來(lái)說(shuō)明一下使用 CodeSmith 可以大大減輕程序代碼的工作量,對(duì)于數(shù)據(jù)庫(kù)應(yīng)用來(lái)說(shuō),盡管數(shù)據(jù)庫(kù)表不盡相同,但基本過(guò)程都是定義數(shù)據(jù)庫(kù)表,設(shè)計(jì)表對(duì)應(yīng)的類,然后使用 ADO 或是 SQL 語(yǔ)句來(lái)訪問(wèn)數(shù)據(jù)庫(kù),創(chuàng)建對(duì)應(yīng)的類對(duì)象等。

使用 CodeSmith 提供的模板,可以幾乎不用手工編寫(xiě)一行代碼,就可以自動(dòng)生成上述數(shù)據(jù)庫(kù)相關(guān)的代碼。

本例使用 Visual Studio 2010 ,Codesmith 安裝時(shí)提供了 Visual Studio 插件支持。使用的示例數(shù)據(jù)庫(kù)也是 Sales,可以參見(jiàn) Hibernate 開(kāi)發(fā)教程(2):準(zhǔn)備開(kāi)始。

由于使用 MySQL 數(shù)據(jù)庫(kù),需要下載 MySQL .Net 庫(kù)。使用 SQL Server 可以直接使用。

  1. 創(chuàng)建一個(gè)命令行應(yīng)用 solution。

  2. 使用 CodeSmith 的 Schema Explorer 添加一個(gè) MySQL 數(shù)據(jù)源

第1張

這里的 Connection String 為: SERVER=localhost;DATABASE=sales;UID=username;PASSWORD=password;(根據(jù)你自己服務(wù)器自行修改參數(shù))

添加成功后,在 Schema Explorer 中會(huì)顯示所連接的數(shù)據(jù)庫(kù)的表定義等

第2張

  1. 在這個(gè) solution 中添加一個(gè) Sales.Data Class Library.然后在項(xiàng)目中添加一個(gè) CodeSmith 項(xiàng)目 Item

第3張

  1. 點(diǎn)擊 Sales.csp 使用鼠標(biāo)右鍵 Context Menu

第4張

使用有 Add Output 可以在項(xiàng)目中添加生成代碼的模板,這里選用 CodeSmith 自帶的 PLINQO-NH\CSharp 下的三個(gè)模板,

模板路徑為..\Users\…\Documents\CodeSmith Generator\Samples\v6.5\Templates\Frameworks\PLINQO-NH\CSharp\

分別添加三個(gè)模板,SourceDatabase 選擇 Schema Explorer 中添加的 Sales 數(shù)據(jù)庫(kù),其它屬性使用缺省值。

第5張

三個(gè)模板分別為

  • Hbms 生成 hbm.xml 映射文件
  • Entities 生成和數(shù)據(jù)庫(kù)表對(duì)應(yīng)的.Net類定義
  • Queries 生成查詢數(shù)據(jù)對(duì)應(yīng)的類

然后通過(guò) Sales.csp 的 Generate code 生成代碼。

可以看到 CodeSmith 自動(dòng)生成了很多代碼,并添加了所需的引用。

第6張

此時(shí)用來(lái)訪問(wèn)數(shù)據(jù)的類全部由 CodeSmith 生成,無(wú)需自己寫(xiě)一行代碼。

  1. 看看如果使用生成的代碼來(lái)訪問(wèn)數(shù)據(jù)庫(kù),修改命令行應(yīng)用的 Program.cs 的 main 函數(shù),打印出所有 Customer 的姓名。
var salesDataContext = new SalesDataContext();
foreach (var s in salesDataContext.Customer.ToList()) 
{
    Console.WriteLine(s.FirstName+" " + s.LastName);
}

使用 SalesDataContext 中 Customer 查詢對(duì)象。然后枚舉列表中每個(gè) Customer 對(duì)象并打印出FirstName 和 Last Name.可以看到代碼自動(dòng)完成了對(duì)數(shù)據(jù)庫(kù)的讀取訪問(wèn)。

第7張

由本例看到使用 CodeSmith 可以大大減輕手工代碼量,其使用的一般步驟是

  1. 選擇使用合適的模板,CodeSmith 隨開(kāi)發(fā)包自帶了大量常用的模板,如果找不到合適的模板,CodeSmith 支持自定義模板。
  2. 為模板選擇合適的參數(shù)設(shè)置。
  3. 自動(dòng)生成代碼(可以為任意類型的代碼,C#,Java, .XML 文本等)

后面將詳細(xì)介紹 CodeSmith 使用的基本方法,CodeSmith 的核心為模板,因此重點(diǎn)在模板的設(shè)計(jì)和使用。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)