随着软件系统规模的日益增大以及N层系统架构的模型的成熟,自动生成代码工具的应用逐渐得到推广。根据N层系统架构各部分的特点,数据访问层与针对数据库库表结构的数据类型层代码可以与数据库的库表对应,自动生成代码工具目前也主要针对数据库已设计完成的基础上实现数据访问层与数据类型层代码的生成。代码生成工具的主要思想都是由具体厂商或开源组织提供工具软件,然后根据项目需要,编写代码生成模板,而模板多以各类脚本的形式完成,工具软件根据模板生成相关代码。在众多的代码生成工具中,CodeSmith Tools公司生产的CodeSmith Generator成为突出的优秀工具,已有多个组织为其提供成熟的模板,其中又以.NetTiers模板较为优秀。
1 技术基础
1.1 CodeSmith Generator
CodeSmith Generator是一套基于模板驱动的用于快速开发的软件工具,目前最新版本为5.3.4版,支持包括C# 、Java、VB、PHP、ASP.NET、SQL等语言的代码自动生成,其本身已包括许多有用的模板。
CodeSmith Generator的句法规则与ASP.NET完全一致,因此只需要熟悉ASP.NET技术,就可以快速掌握模板的句法规则,在编写的模板中可以应用C#、VB.NET或者JScript.NET语言,输出的代码则可以是任何以文本表达的语言代码。CodeSmith Generator能在短时间内提供高质量的、风格一致的代码,其主要特点包括:
1)有效减少重复代码
2)以更短的时间生成更少缺陷的代码
3)代码符合指定的标准
4)创建能生成任何语言代码的模板
1.2 .NetTiers
.NetTiers是一套免费的、开放源代码的源代码生成模板,应用.NetTiers可以在几分钟内生成Microsoft.Net应用程序的自定义应用程序层代码。.NetTiers应用了成熟的设计模式和微软推荐的最佳实践经验,同时,.NetTiers体系是架构在Microsoft Enterprise Library Application Blocks基础上。
.NetTiers模板生成的系统架构如图1所示。
1.3 建立环境
CodeSmith Generator配合.NetTiers的最新版本为2.3.1版,全套环境安装步骤为:
1)安装Visual Studio 2010及.Net 4.0
2)安装Microsoft SQL Server或客户端
3)安装Enterprise Library 5.0
4)安装CodeSmith Generator5.3.4
为保证目标系统能包括所有源代码以通过代码审查,安装Enterprise Library时,一并安装其源代码。
2 生成代码
2.1 数据库设计
由于CodeSmith Generator结合.NetTiers模板自动生成源代码的工作方式,是以数据库为中心,以数据库为起点,所以必须先由经验丰富的设计人员,根据项目需求,设计成型的数据库。目前.NetTiers模板支持的数据库管理系统包括SQL Server、Oracle等主流数据库,以下内容以SQL Server为例完成。
设计数据库时,为了实现对数据库的增、删、改、查操作,必须对指定的所有表设置主键,建立完整的外键关系,可以根据需求创建需要的视图,由于对各视图、表的操作将由自动创建的存储过程完成,所以如果需要在生成的代码中使用自定义存储过程,则所有自定义存储过程必须按一定的命名规则进行,否则无法针对这些自定义存储过程创建访问代码。
2.2 配置模板
.NetTiers模板中,在生成代码时,需要访问目标系统的数据库,根据数据库生成相关代码,所以在生成代码前,必须在CodeSmith中配置相关参数。
找到.NetTiers模板,右键点击“NetTiers.cst”文件,选择快捷菜单项“Execute”,进入配置窗口。
主要配置参数如表1所示。
其中需要注意的是ProcedurePrefix的应用,此格式需要和数据库设计中开发人员自定义存储过程有前缀对应,否则生成的代码不能方便地实现对存储过程的访问。
大部分的配置参数可以通过右侧的按钮激活向导完成或在下拉选择项中选择合适的参数值。
完成参数配置后,点击“Generate”按钮即可开始自动生成代码。
3 小结
CodeSmith Generator配合.NetTiers模板生成基于.NET平台项目代码目前已达到较完善的程度,所生成的代码基本符合大型项目N层架构的合理规划,中小型软件技术公司项目组可采用此工具提高生产率和生产质量。但由于.NetTiers是主要针对微软技术平台而编写的,所以如果是使用的SQL Server 2000及以上版本没发现有问题,但如果采用的是其他数据库,则可能存在不足,如针对Oracle中的Number类型字段,如果设置的字段小数位数不是0,则生成代码在读取数据后的数据类型转换中会产生“数据类型不匹配”的异常。
参考文献:
[1] CodeSmith Tools.http://www.codesmithtools.com/.
[2] .netTiers Generate Tiers of Joy.http://www.nettiers.com/.
[3] Microsoft.http://www.microsoft.com.