下载链接
介绍
通过本文你可以学习到如何利用微软企业库、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://cstemplates.sourceforge.net/
在上面的地址里下载最新的.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,不知道适合适合企业开发,它有那些缺点呀。