65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 CodeSmith API 的代码生成器

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.87/5 (19投票s)

2007年1月8日

4分钟阅读

viewsIcon

131954

downloadIcon

5517

该工具使用 Code Smith 模板和 API 生成 C# 代码。

Sample Image - Code_Generator.jpg

引言

在我开始解释我的代码生成器是什么以及它是如何工作的之前,我想告诉大家我写这篇文章和我的代码生成器是因为什么。

正如所有程序员都知道的,为 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

© . All rights reserved.