本期茶话会主题:CodeSmith&NetTiers Step by Step
主讲&文档撰写:Jacob.Huang
文档最后统筹:Jimmy.Ke
时间:2007-11-07
参与人员:Diapers Team & Enterprise Product Team
一 技术背景
在Suryani.China的项目中,GenClaims、Warehouse等项目以Microsoft Enterprise Library作为基础的技术架构,包括其中的DataAccess Block、Logger、Exception、Encryption、Cache等等,搭配使用Open Source的MyGeneration作为代码生成器。整体技术架构遵循三层模型,包括Entity包(实体包,与Database一一映射)、Data包(Access to Database,与数据库交互)、Core包(业务逻辑包,对Data包的简单代理以及扩展、事务实现)、Web表现层,其中Entity、Data包、Core包的大部分代码由MyGeneration自动生成,并通过partial class的方式支持自定义扩展。
与这种存储过程和数据驱动的架构类似的解决方案是:CodeSmith + NetTiers组合。CodeSmith作为一个著名的代码生成工具,同样提供了基于模板生成C#、VB.NET、TSQL等语言代码的功能,并且支持ASP.NET语法的自定义模板;NetTiers则提供了一套成熟的基于CodeSmith的模板,在Microsoft Enterprise Library的基础上对其进行了封装和再组织,帮助开发者快速开发遵循三层架构的代码,以期在一定基础上统一并简化对EL的操作,避免重复的工作,减轻开发者的负担。本文是对本次茶话会的总结和扩展,对CodeSmith和NetTiers做一个简单的介绍。Jacol.Huang也在茶话会上分享了他的开发经验。
二 环境安装和配置
首先从www.codesmithtools.com 下载最新版本的Code Smith安装文件(Professional版本,有30天的试用期)。Code Smith有两个版本,Standard 和 Profession版,我们使用Profession 版本,可以编辑模板。
其次从www.nettiers.com 下载最新的Net Tiers包,NetTiers是免费的。
三 Code Smith Step by Step
下载netTiers2.2后,解压到目录,右击选择Excute,打开CodeSmith配置窗口。 在CodeSmith配置窗口中编辑配置属性,比如数据源、代码输出目录、数据源表和视图等等。
配置完毕后点击Generate生成工程包和代码,如下图所示,包括一份生成报告report.html。
CodeSmith的自定义模板支持ASP.NET语法,包括命名空间的引入和属性的读取。可以在模板中定义需要引入的命名空间和CodeSmith配置界面将呈现的属性,如下图所示。
四 NetTiers Step by Step
下图是一个利用NetTiers和CodeSmith生成的解决方案的截图,其中包括Web视图(自动生成的针对单表的维护界面)、Entities实体包、Services业务逻辑包等等。
利用NetTiers,还可以生成自定义的存储过程、视图,可以在CodeSmith配置界面中配置生成的存储过程的前缀等属性。如下图所示。
如果要扩展NetTiers框架生成的代码,则可以修改Processor,添加相应的扩展代码。如下图所示。
五 与现有技术架构的比较
与现有的MyGeneration自定义模板相比,利用CodeSmith + NetTiers,架构基本上遵循NetTiers所定制的结构,每次修改数据库表结构后都需要重新生成代码,并将其拷贝到解决方案的相应位置。利用CodeSmith生成的自定义存储过程也是一样。
另外,NetTiers是一个相对完善的框架,其生成的文件较多,对硬件的要求也相对较高,特别是大型系统。 六 技术参考
参考网站:http://www.cnblogs.com/iCaca/category/80950.html
博客园网友的Net Tiers系列学习笔记
关于EL的可以查看MSDN的相关WebCast
http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/consyscourse/EntLib.aspx
CodeSmith官网:http://www.codesmithtools.com
NetTiers官网:http://www.nettiers.com
15分钟快速构建数据访问层:http://onlytiancai.cnblogs.com/archive/2006/02/16/331700.html