15分鐘內快速構建資料訪問層
下載連結
- 下載CodeSmith 30天免費試用用專業版
- 下載最新的 .NetTiers模板
- 觀看本文章的相關視頻示範
介紹
通過本文你可以學習到如何利用微軟企業庫、CodeSmith、.NetTiers模板在少於15分鐘內快速構建資料訪問層。
從現在起我們把資料訪問層(Data Access Layer)簡稱為DAL,它是程式中和資料庫進行互動的層。手寫DAL層代碼是非常枯燥無味,浪費時間的重複活動,還有可能在編譯器的時候出現好多漏洞。
我們需要確保已經安裝了SQL Server的Northwind資料庫,但是這個例子也可以運行在其它任何資料庫上。當然了,看完文章後你將不會再單調無味的浪費時間去為你的應用程式寫DAL層代碼了,而是更快、更簡單。
如果你看完這篇文章你將會在1分鐘內使用最佳實務來建立一個資料訪問層(其它14分鐘是用來第一次下載所需的軟體)。
代碼產生概述
代碼產生,或者使用工具軟體產生代碼,不是一個新的概念。實際上,代碼產生已經很普遍了。本篇文章我們用CodeSmith來產生DAL層的代碼以及T-SQL指令碼。
CodeSmith是一個開發人員常用工具,它可以使用模板來輸出你想要的格式代碼。你可以使用模板來產生任何你想要的代碼,功能特彆強大,本文就是用了一個.NetTiers模板。
第一步 安裝軟體
首先我們就是下載CodeSmith和.NetTiers,其中前者是30天試用版(當然網上也有破解工具,當前最新版是3.2,是for .net 2.0的,我們下載3.1或者3.0版就行)
下載並安裝CodeSmith
http://www.codesmithtools.com/
CodeSmith已經內建了好多模板,並且我們一會兒會讓它包含進我們需要的.NetTiers模板,安裝好CodeSmith,我們下載.NetTiers模板庫。
為CodeSmith下載.NetTiers模板庫
http://www.nettiers.com
在上面的地址裡下載最新的.NetTiers模板庫安裝檔案。
最後一步就是確保你安裝了SQL Server資料庫並且準備好串連到資料庫的連接字串。
第二步– CodeSmith
開啟CodeSmith,我們先快速熟悉一下它的用法。
前文介紹過CodeSmith是一個模板驅動的工具。在CodeSmith的右邊有一個範本瀏覽器視窗,它可以讓你快速使用你已經安裝的模板,見。
我們先來學習一下使用模板,雙擊Hashtable.cst模板。
Hashtable.cst是用來產生強型別集合的hashtable類型的模板。我們再來快速看一下CodeSmith的另一個視窗,屬性視窗。
屬性視窗可以讓你來設定模板的屬性,如果使用Hashtable.cst模板,我們需要設定ClassName,ItemType和KeyType屬性。舉個例子,我們要建立一個Person對象的集合,並且使用integer類型鍵來訪問的PersonCollection集合。你需要把在屬性視窗裡把ClassName設定成PersonCollection,ItemType設定成Person,KeyType設定成int。點擊工具列裡的run按鈕,就可以產生你需要的強型別集合的源碼了。
你看一下Hashtable.cst你就會發現它有點兒像ASP.NET的文法,其實CodeSmith模板就是使用類似ASP.NET的形式來產生你想要的代碼,只不過是ASP.NET是用來產生HTML代碼的,而CodeSmith是用來產生你需要的原始碼的。
你要記住的一點是CodeSmith不會自動產生你需要的代碼,但你可以自己定義模板來產生所有你想要的代碼。
第三步 –產生資料訪問層
我們已經基本理解了CodeSmith的用法,現在來示範如何使用.NetTiers模板。
記住,CodeSmith允許你快速的產生代碼,並且很少會有手寫代碼造成的錯誤。.NetTiers模板產生的程式碼也是微軟推薦的資料訪問的最佳實務。
First we need to add the .NetTiers templates to the CodeSmith Template Explorer:
首先我們需要把.Nettiers模板添加到範本瀏覽器視窗。
- 在範本瀏覽器點擊開啟目錄表徵圖並瀏覽包含模板的目錄
- 選擇.NetTiers的安裝目錄,我的安裝目錄是是C:\Program Files\SerialCoder\NetTiers 0.9.2 - Caribert\Templates\
- 選擇後就會在範本瀏覽器視窗裡添加一個檔案夾,展開它並選中NetTiers.cst模板
- 現在我們來配置資料連線字串,開啟NetTiers.cst模板,在屬性視窗裡點擊SourceDataBase屬性後面的對話方塊。
- 在這個視窗裡你可以新建立一個自己的資料來源,如。
- 測試一下串連是否成功,點擊OK按鈕關閉此視窗,然後選擇你剛才建立的資料來源名字。
- 最後,這是EntireDatabase屬性為True,NameSpace屬性為Demo,OutputDirectory屬性為你想輸出的目錄,當然你需要提前建立好要產生代碼的目錄。
至此,你已經完成了NetTiers.cst模板的所有屬性設定,它看起來應該如。
當然我們沒有告訴你所有的關於.NetTiers的屬性設定,但是對於產生撲通的DAL層代碼已經足夠了,點擊工具列裡Run按鈕(小箭頭)就可以產生代碼了。
注意:你建立的資料表一定要設定主建哦,如果沒有主建,這個表就不會產生響應的代碼,你點了Run按鈕後會彈出一個報表,你可以看到都產生了哪些表的相關代碼。
第四步 – 查看產生的程式碼
用Visual Studio .NET開啟你剛才設定的代碼輸出目錄裡(我設定的是c:\NetTiers\Northwind_Demodirectory)的Demo.sln解決方案。
我們來快速看一下方案套件含的項目和檔案。
You should find 3 projects within the solution:
你會看到有解決方案裡包含3個項目
- Demo –此項目包含了你要和資料庫互動的主要的類。
- Demo.DataAccessLayer – 此類庫包含了實際的資料庫操作執行代碼
- Demo.DataAccessLayer.SqlClient –此類庫包含了微軟推薦的訪問資料庫的設計模式和最佳實務(Microsoft Patterns & Practices classes)的代碼。
第五步–編譯、完成
接下來,我們用Visual Studio來編譯項目。
祝賀你,你現在已經有了一個使用微軟推薦的訪問資料庫的最佳實務的資料庫訪問層
現在你就可以在其它項目裡使用你的DAL層了,舉個例子,你需要擷取,更新和刪除一條員工的記錄。
using Demo.DataAccessLayer.SqlClient;
// Select by primary key
Employee employee = SqlDataRepository.EmployeeProvider.GetByEmployeeID(13);
employee.FirstName = "John";
employee.LastName = "Doe";
// Save changes
SqlDataRepository.EmployeeProvider.Save(employee);
// Delete record
SqlDataRepository.EmployeeProvider.Delete(employee);
關於更多產生DAL層的資訊,參考下面的.NetTiers的連結。
http://cstemplates.sourceforge.net/nettiers-manual-v1.html
記住,你的資料訪問層的代碼都是通過模板產生的。如果你修改了資料庫的結構,你只需要簡單的通過模板重建一下DAL層代碼就行了。(當然了,如果你在重建代碼前修改了一下產生的程式碼,再重建就給你覆蓋了,這個怎麼辦呢,比較麻煩,你可以寫一個繼承自自動產生類的子類,在那裡重寫相關的方法,或者在.NET 2.0裡使用多檔案類)另外你可以根據你的想法擴充你的模板,包括注釋,命名規範,模式等等。
小節
CodeSmith可以根據你的模板產生任何你想要的代碼,本文向你示範了如何在短短几分鐘內使用.NetTiers模板來在你應用程式中建立使用訪問資料庫最佳實務的資料庫訪問層。
你可以在這裡查看視頻示範:
http://community.codesmithtools.com/r.ashx?id=1
CodeSmith 3.1的一個新特徵就是可以計算程式碼。它可以保守的計算CodeSmith產生的程式碼。
這裡可以看到.NetTiers產生了91,559行代碼。假設一個很厲害的程式員一小時可以寫60行代碼,寫完這些代碼需要1,800小時。加入一個厲害的程式員你每小時要付給它接近60美元,CodeSmith和.NetTiers幫你公司節省了1,800小時的時間和109,000美元。(好像誇張了點兒哦。)
現在擷取一個CodeSmith並發揮它的威力吧。
CodeSmith和.NetTiers 相關資源
如果你對CodeSmith有一些問題,可以訪問它的社區來擷取解決: http://community.codesmithtools.com/. CodeSmith社區裡有好多人寫的模板並共用給每個人下載,你可以去看看有沒有自己需要的。
如果你想想購買CodeSmith,可以訪問它的網站http://www.codesmithtools.com/. 你可以擷取一個授權來免除30天試用的限制。如果你還有問題,可以給它們的售後支援郵箱發email sales@codesmithtools.com.
如果你對.NetTiers模板有問題,可以訪問下面的論壇:
http://community.codesmithtools.com/forums/16/ShowForum.aspx
英文連結:
Build a Data Access Layer in less than 15 minutes
http://community.codesmithtools.com/blogs/tutorials/archive/2006/02/13/nettiers.aspx
另外藉此貼調查一下各位的持久層用的都是什麼呀,NHibernate, ibatis.net,DAAB,SPL,SQLHelper,CMP還是其它的,我想以後在項目中主要用一下企業庫裡的DAAB,不知道適合適合企業開發,它有那些缺點呀。