使用 CodeSmith API 的代码生成器






2.87/5 (19投票s)
2007年1月8日
4分钟阅读

131954

5517
该工具使用 Code Smith 模板和 API 生成 C# 代码。
引言
在我开始解释我的代码生成器是什么以及它是如何工作的之前,我想告诉大家我写这篇文章和我的代码生成器是因为什么。
正如所有程序员都知道的,为 DAL 和 BL 编写代码非常耗时,而且我们为每个项目编写相同的代码行,除非有一些自定义更改。所以我想,为什么我们每次都要承担这种负担呢?应该有更快速、更简单、更有效的方法。于是我开始探索并着手进行。随着我不断深入,我发现 CodeSmith (www.codesmithtools.com) 是一个实现这一目标的有用工具。
CodeSmith 使软件开发人员能够高效地
- 减少重复编码
- 以更少的时间、更少的 Bug 生成您的代码
- 生成符合您标准的一致性代码
- 为任何语言创建您自己的自定义模板
于是我开始学习 CodeSmith,幸运的是,由于其简单的结构,我很快就掌握了它的概念和工作方式。
现在我应该解释我的软件的工作原理。首先,我开始为自己编写模板。我开始构建自己的框架。作为一个初学者,我开始理解 .netTiers 应用程序框架 (http://www.nettiers.com)。在理解了这个框架之后,我开始构建我的框架,并从 .netTiers 应用程序框架中获得了一些帮助。
我的框架包含以下类
- 实体类
- 实体基类
- 实体控制器类
- 实体控制器基类
- 数据提供程序类
- 数据提供程序基类
- 通用列表类
- CBO 类
实体类
此类继承自基类实体基类,实体类不包含任何函数,但您可以覆盖基类中的虚拟函数。如果您需要自定义函数,您可以在实体类中编写自己的函数,而不是在基类中。
实体基类;
此类包含数据库表所需的属性和方法。它是一个抽象类。除构造函数外,此类还包含以下函数
- Equals
- GetHashCode
实体控制器类
此类继承自基类实体控制器基类,此类也可以覆盖基类中的虚拟函数。
实体控制器基类
此类包含以下基本方法
- Add(带四个重载方法
- Update(带四个重载方法)
- Delete(带四个重载方法)
- GetPagedData(用于获取分页数据)
- DeleteAll
- Get
- GetAll
- GetCustomView(用于获取自定义数据表列)
- GetByPk
- CountAll
- GetByFk
此类调用数据提供程序类中的函数与数据库进行交互。
数据提供程序类
此类继承自基类数据提供程序基类,此类也可以覆盖基类中的虚拟函数。
数据提供程序基类
此类实际与数据库交互。为此,我使用了 Microsoft Enterprise Library 2006。它提供了高效的数据访问库。您可以从 Microsoft 网站 (www.microsoft.com) 下载 Enterprise Library。
通用列表类
在我的框架中,为了批量获取数据,我使用通用列表而不是数据集,为此我编写了通用类。
CBO 类
我使用此类将对象转换为所需的类或实体对象。
CodeGenerator
我为上述类编写了 CodeSmith 模板。除这两个类外,我还编写了另一个模板,用于生成将在数据提供程序基类的方法中使用的存储过程。
现在来说说我为什么写一个应用程序来编译我编写的 CodeSmith 模板。问题在于,为了生成某些数据库的代码,我们必须为每个表编译每个模板。这会花费一些时间和精力,所以我开发了这个应用程序来执行这项工作。我通过仅提供数据库信息来使用所有这些模板生成代码。我开发的这个工具使用 CodeSmith API 来编译模板。请在您的系统上安装 CodeSmith 3.2 来生成代码。
CodeSmith 模板还有一个名为 SqlScript.cs 的代码隐藏类。我从 .netTiers 应用程序框架 (http://www.nettiers.com) 采用了这个类,并添加了一些自定义函数供我的框架使用。
请告知您的建议和评论,谢谢。我正在致力于版本兼容性,例如 dot net 2003 和 dot net 2005。以及编译与我的框架不特定的其他模板。
姓名:Muhammad Shafqat Masood
软件工程师(Nextbridge)
联系方式:Napster_ghb@yahoo.com