CodeSmith介绍

什么是CodeSmith?从字面上直译可以看作“代码工匠”。这倒是个很拟人化的名称,顾名思义,CodeSmith的目标就是根据模板生成规范可用的代码,为程序员减轻工作负担。
程序员是软件开发团队中的最小单位,有什么任务都只能自己一肩扛起而无法再往下分配。但是程序员又是聪明的,他们总是能找到很多美妙的办法来减轻压力,代码生成器就是一个典型的例子。事实上,Visual Studio 2005本身就自带了代码生成的功能,比如您在代码编辑器中输入关键字“for”,然后直接按Tab键,代码生成器便会为您生成好一段模板式的代码:

        static void Main(string[] args)

        {                      

            for (int i=0;i<length;i++)

            {                  

                               

            }                  

        }                      

Visual Studio 2005还能自动生成其它更多形式的代码,但终究不如CodeSmith那样强大和丰富,毕竟术业有专攻嘛。CodeSmith是以模板作基础来为程序员生成高质量代码的,模板可大可小,CodeSmith一次能够生成的代码量也就可多可少,这主要靠具体问题具体分析。

CodeSmith的模板是以“.cst”为后缀名的代码文件,其风格非常类似于ASP.NET。模板中除了大量固定的代码以外,还有遍布于各处的元数据(metadata)。固定代码就是会被CodeSmith原封不动地输出的代码,而元数据则可以被看作是模板中的变量。

CodeSmith是一个基于模板的代码生成器。模板是所生成代码的式样。开发者或架构师可应用CodeSmith来生成任何文本语言的代码。其结果(生成的代码)可通过属性来自定义并包含在众多的标准属性类型之中。另外,用户还可建立自定义的属性类型。

   针对.NET Framework而言,性质可以是任何拥有设计器的.NET对象。例如,它可以是一个简单的分配标题的字符串性质。另一方面,可用TableSchema对象来访问数据库表中的一切内容。

  CodeSmith工具的一个强项是它的语法,其与ASP.NET的方法相当。实际上,你使用CodeSmith生成代码之前必须编写相应的模板,可以使用C#、VB.NET和JScript.NET进行模板的编写。事实上,CodeSmith可输入任何ASCII语言。

  CodeSmith 包括两个工具,一个是CodeSmithStudio.exe是用来设计和编译模板;另一个是CodeSmith.exe是用来运行模板生成代码的, CodeSmith.exe还可以与VS.NET集成,成为VS.NET的一个外部工具。

以下是对CodeSmith实现原理的简略概述:
1、支持执行代码块语法  ,与 Asp.net语法一模一样
2、支持内联表达式语法  ,与 Asp.net语法一模一样
3、 支持Code Behind功能(,与 Asp.net的()类似
4、 支持 函数代码块功能,  与Asp.net的函数代码块功能 类似
5、支持属性申明,用于配置模板的属性.  Asp.net语法不支持.

 

那么现在我们就通过一个简单的模板文件来了解CodeSmith的工作原理:
如果您了解ASP.NET的语法,那么就很好理解CodeSmith模板文件了

   <%@ CodeTemplate ResponseEncoding="UTF-8"  Debug="True"  Src="Base.cst.cs" Inherits="BasePage" Language="C#" TargetLanguage="C#" Description="Demonstrates the most basic template." %>

<%@ Property Name="Tables" Type="SchemaExplorer.TableSchemaCollection" Category="Source" Optional="True" %>

<%@ Property Name="Views" Type="SchemaExplorer.ViewSchemaCollection" Category="Source" Optional="True"   %>

<%@ Property Name="MustLog" Type="System.Boolean" Default="true"  Category="Source" %>

<%@ Assembly Name="SchemaExplorer" %>

<%@ Assembly Name="CodeSmith.CustomProperties" %>

<%@ Assembly Name="System.Data" %>

<%@ Assembly Name="System.Design" %>

<%@ Import Namespace="System.Data" %>

<%@ Import Namespace="System.IO" %>

<%@ Import Namespace="SchemaExplorer" %>

<%@ Import Namespace="System.Design" %>

 Description:作为模板的描述性信息并可以在该模板的ToolTip中显示;
● 
Inherits:尽管默认情况下所有模板都继承自CodeSmith.Engine.CodeTemplate,但仍然可以由您来指定模板继承自其它类(只要该类直接或间接地继承自CodeSmith.Engine.CodeTemplate);
Src:该属性使您能够将其它类的功能添加进当前模板,您能够用这个属性来实现“代码隐藏”模型;
● 
Debug:当该属性被设置为True时,您就可以使用System.Diagnostics.Debugger.Break方法来为您的模板设置断点;
OutputType:该属性用于指定以“Normal”、“Trace”或“None”方式输出模板;
● 
LinePragmas:当该属性被设置为True时,模板错误将指向源代码;设置为False时,模板错误将指向编译后的代码;
ResponseEncoding:用于设置模板及输出的编码,该属性支持来自于System.Text.Encoding.GetEncoding方法的值,默认情况下为ASCII。

     Language 模板语言

     TargetLanguage 创建代码语言(生成的代码的语言类型)

把生成的partial文件夹直接复制到逻辑层(BLL)中, BLL添加DAL引用(Subsonic生成DAL文件),这样就可以使用生成代码了。(逻辑层引用数据库层)

 

注意:





 
 
 
 
 
 2011-01-05   08:21:21
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值