要想知道CodeSmith到底有多强大那么我告诉你最好的方法就是去试试,尽管CodeSmith有很多高级甚至复杂的功能,但你不用掌握这所有的功能就能很好的用它来帮你生成代码。
在这一章,你将学习到如何使用CodeSmith生成一段有用的代码-强类型的hash表类,跟着我,保证你不到五分钟就能完成,并且你能领略到CodeSmith Explorer和CodeSmith Studio生成模版代码的强大功能。
2.启动CodeSmith Explorer
第一步要做的就是启动CodeSmith Explorer,就像Windows Explorer 组织存储在你计算机上的文件夹的功能类似,CodeSmith Explorer的主要功能是是组织模版文件,通过select Start > Programs > CodeSmith 3.0 > CodeSmith Explorer启动你的CodeSmith Explorer,在CodeSmith Explorer的初始界面包括了一些示例模版。
3.打开一个模板
模板示生成代码的样式,CodeSmith提供一些很有用的基础模板,你也可以从CodeSmith support site
下载到更多的模板,你也可以用CodeSmith开发你自己的模板。
首先,点击根目录文件夹的加号
以cst为扩展名的文件就是CodeSmith模板,你可能已经从这些模板的名字猜出了它们的大致用途了吧。例如CSHashTable.cst 模板用于生成c#hash表类,双击这个模板(或者鼠标右键选择执行)打开它。
4.设置属性
一个代码生成器如果每次都生成相同的代码那么根本就没用,当然如果你仅仅把它当成一个代码存储器那么就另当别论了。CodeSmith可以自定义属性来让你生成自定义代码。当你用CodeSmith Explorer打开一个模板文件,模板属性页会显示出模板所需要的属性。在CodeSmith生成代码之前你必须填写这些参数的值。CSHashTable模板需要四个字符串类型的属性(ClassName, ClassNamespace, ItemType, and KeyType)以及一个枚举类型的属性(Accessibility).。你可以为字符串类型的属性输入你想输入的任意值,而枚举型属性你只能通过下拉菜单来选取相应的值。作为第一次尝试,我们输入以下一些值:
CodeSmith最大的优点就在于能定义不同类型的元数据属性。例如,你可以创建一个数据库表单属性,让使用者在数据库中选取表并生成代码。CodeSmith创建数据库表属性的特点我们将在以后的章节讲解。
我们回顾一下上一节的内容:我们利用CodeSmith Explorer了解了模板文件的基本构成。
下面我们就利用CodeSmith模板来生成一个代码:
1.生成代码
当你按照前一节的步骤来做,那么现在你已经为生成我们的第一个模板代码做好了一切准备了。接下来你就可以按下模板属性页下面的生成按钮,CodeSmith会提取你输入的属性并把他们融合到生成的代码里面。接下来你可以使用Ctrl+C轻松的复制生成的代码了。
如图所示,代码窗口中包含了320行hash表类代码,植入了IDictionary, ICollection, IEnumerable, and ICloneable接口。如果你是有经验的开发者的话,那么你肯定知道如果这些模板都是既定不变的写死了的话,那肯定是最让人头痛的事情。而CodeSmith 之所以是最理想的工具就在于你可以生成你自己的模板,这就确保了以后使用模板足够的灵活性。一切都是那么符合一个程序员的心意。
2.了解模板结构
接着让我们来看看CSHashTable.cst 模板代码。如图所示,模板包含了CodeSmith 用于生成代码的结构。回到CodeSmith Explorer,在模板上点击鼠标右键选择编辑。将启动CodeSmith Studio打开模板进行编辑。
在接下来的章节你将了解到更多关于的细节。而现在,你仅仅对CodeSmith有了一点泛泛的了解,其次,你是不是已经发现CodeSmith模板语言和ASP.NET非常相似?以一些定义符作为开始,包含一些属性的声明。这些属性将在后面的代码中使用到。例如在模板中有这样一行:
namespace <%= ClassNamespace %>
在类命名空间“namespace”后面紧跟属性名称。
如果你不喜欢CSHashTable模板,你完全可以按照你的想法修改它。例如,你可以加一些对接口的注释。记得做好改变以后点击保存。
3.回顾
以下一些步骤是你使用CodeSmith生成模板所必须做的:
(1)启动CodeSmith Explorer
(2)选择模板
(3)输入属性值
(4)生成代码
最近要忙期考,但还是决定每天抽点空来写CodeSmith的系列文章了,在此实在不敢用教程这个词语,毕竟自己对CodeSmith了解的也不是很多,有很多牛人都在博客园发布了不少关于CodeSmith的文章了,但我还是想发表一下自己的心得,希望能给初学者更多的参考,教程中有错误或者表述不清的地方欢迎大家指出,我还是会秉承之前的风格,用尽量多的图来说明步骤,因为我觉得还是图文并茂的文章比较容易理解.
好了,废话少说,开始我们的CodeSmith旅程吧,我先讲讲这个系列教程要完成的目标吧,众所周知,CodeSmith其中一个强大的功能就是依照模板生成批量代码,这也是吸引着众多编程人士使用它的原因,它大大的节约了编程时间,省去了大量复制粘贴的废操作.
首先,既然要讲解如何使用CodeSmith和PowerDesigner快速生成批量代码,当然要先安装这2个软件啦,下面就简单说说如何安装破解这2款软件吧,当然破解只是学习之用,请大家不要用于商业用途哈,要支持正版,大家都是做软件的,知道开发一套软件实属不易啊.
CodeSmith安装方法:
1). 点击下载安装文件
2). 运行,安装步骤就不说了,选择你要安装的目录,一路下一步就OK了.
3). 运行 ,选择CodeSmith的安装目录 ,一路下一步,就破解
完成啦,接着你就可以在开始--CodeSmith Professional 5.1--CodeSmith Studio运行程序啦.
PowerDesigner安装方法:
http://dev.firnow.com/course/3_program/java/javajs/20090908/174375.html
安装完这2个软件了,接着就开始使用吧,还是和以前一样,先提出需求,再做实例,因为我们之所以使用它们,肯定是因为它们能巧妙的解决某种问题,不然我们干嘛花那么多时间和硬盘空间安装它们.
好,我们现在的需求是:希望当接到一个新的工程项目时,程序员只需要根据项目需求,设计出数据库的结构(表,表的字段,表间关系),之后只要按一个按键,就能立刻得到基于该数据库的所有分层架构代码文件.也就是说,我们希望能在不敲一行代码的情况下获取所有我们想要的代码!而这就是这2个软件能做到的事情,也是我们安装它们的目的.
好了,角色已经介绍完了,接着看看它们是如何演绎这场精彩的演出的吧:
首先我们需要创建一个测试数据库,为了简单,我们在这个数据库中只创建一个Student表和一个Major表.其表结构和关系如下所示.
看看怎样用PowerDesigner快速的创建出这个数据库吧.
1.现在开始使用PowerDesigner创建数据库,首先运行程序,进入主界面:
2.File—New Model—Physical Data Model—Physical Diagram—Model name 设置为test,DBMS属性设置为Microsoft SQL Server 2005:
3.首先用表格工具创建一个表格模板:
4.双击表格模板,设置属性,我们首先设置Major表:
5.设置好表名,点击Columns标签,设置字段属性,设置如图所示:
6.因为MajorID字段我们要设置为自动增长,所以要设置它的高级属性,选择MajorID字段,点击属性按钮,在General面板中勾选上Identity复选框:
7.确定后我们再创建一个Student表,字段设置如图所示:
8.接着是为Student创建一个MajorID外键,使用PowerDesigner可以很轻松的完成这个工作,选择关系设置工具,在Student表上按住左键不放,拖拽至Major表,便可为Student表添加一个MajorID的外键:
9.哈哈,现在测试表已经设置好了,接着设置一下我们要生成的数据库吧,这些表都将被创建到该数据库中,我们在设计面板空白处右键—Properties,在弹出的属性设置对话框设置如下:
10好了,在此我们对新数据库的设置已经完成,但是在SQL中还是空空如也啊,我们要怎么把这边设计好的结构移植到SQLServer 2005中呢?执行操作:Database—Generate Database,设置好存储过程导出目录和文件名,点击确定即可:
11.到你的导出目录,就可以看见导出的数据库创建存储过程了,打开SQL,执行一下,你就会看到数据库被神奇的创建好了:
12.好了,数据库的准备工作做好了,下一篇我们就将使用该数据库结合CodeSmith自动批量生成代码啦~
上述实践中生成的源代码:
/* ============================================================== */
/* Database name: PD_test */
/* DBMS name: Microsoft SQL Server 2005 */
/* Created on: 2010/6/13 星期日 17:27:17 */
/* ============================================================== */
drop database PD_test
go
/* ============================================================== */
/* Database: PD_test */
/* ============================================================== */
create database PD_test
go
use PD_test
go
/* ============================================================== */
/* Table: Major */
/* ============================================================== */
create table Major (
MajorID int identity ,
Name nvarchar ( 20 ) not null ,
Remark nvarchar ( Max ) null ,
constraint PK_MAJOR primary key (MajorID)
)
go
/* ============================================================== */
/* Table: Student */
/* ============================================================== */
create table Student (
StudentID nvarchar ( 20 ) not null ,
MajorID int null ,
Name nvarchar ( 20 ) not null ,
Sex bit not null ,
Age int null ,
Remark nvarchar ( Max ) null ,
constraint PK_STUDENT primary key (StudentID)
)
go
alter table Student
add constraint FK_STUDENT_REFERENCE_MAJOR foreign key (MajorID)
references Major (MajorID)
go