CodeSmith 概述

2018-08-12 21:16 更新

概述

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

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

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

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

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

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

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

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

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

第1張

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

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

第2張

  1. 在這個 solution 中添加一個 Sales.Data Class Library.然后在項目中添加一個 CodeSmith 項目 Item

第3張

  1. 點擊 Sales.csp 使用鼠標右鍵 Context Menu

第4張

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

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

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

第5張

三個模板分別為

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

然后通過 Sales.csp 的 Generate code 生成代碼。

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

第6張

此時用來訪問數(shù)據(jù)的類全部由 CodeSmith 生成,無需自己寫一行代碼。

  1. 看看如果使用生成的代碼來訪問數(shù)據(jù)庫,修改命令行應(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 查詢對象。然后枚舉列表中每個 Customer 對象并打印出FirstName 和 Last Name.可以看到代碼自動完成了對數(shù)據(jù)庫的讀取訪問。

第7張

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

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

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

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號