`
zendj
  • 浏览: 122020 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

CodeSmith技术原理初探

阅读更多

CodeSmith技术原理初探.



初次听说CodeSmith是在一篇叫做<每个开发人员现在应该下载的十种必备工具>的文章,起初CodeSmith给我的印象不是吸引人.也是在去年的某一段相对比较空闲的时候,抽空尝试了一下CodeSmith,才发现CodeSmith确实是一个好东西.使用过CodeSmith之后,才发现它的实现原理其实不是很复杂,它从Asp.Net的语法中借鉴了不少,应该说CodeSmith实现了Asp.net一部分功能(从aspx模板生成html脚本)的伪Asp.net,只是CodeSmith额外提供了属性申明的功能.以下是对CodeSmith实现原理的简略概述:
1/ 支持执行代码块语法 ,与 Asp.net语法一模一样
2/ 支持内联表达式语法 ,与 Asp.net语法一模一样
3/ 支持Code Behind功能(,与 Asp.net的()类似
4/ 支持 函数代码块功能, 与Asp.net的函数代码块功能 类似
5/ 支持属性申明,用于配置模板的属性. Asp.net语法不支持.

关于CodeSmith如何通过模板生成代码的问题, 我们只要了解一下Asp.net如何通过Aspx文件生成Html脚本的过程就可以明了.其实Asp.net生成Html脚本过程远比CodeSmith复杂的多,因为Asp.net还要呈现ServerControl的Html脚本.而CodeSmith只专注于 "执行代码块" "内联表达式" " 函数代码块"的文法分析及转换. 该文法分析的逻辑也相对简单(和Asp.net一模一样),具体过程如下:
1/ 产生一个类Class1(以模板文件名作为类名),默认从CodeTemplate类继承,如果有Code Behind,那么就从Code Behind标记的父类继承(该父类必须从CodeTemplate类继承)
2/ 根据所申明的属性,在Class1中添加相应的属性申明及成员变量代码
3/ 把模板文件中的 函数代码块中的函数体 原封不动的拷贝到Class1中,作为Class1的成员函数
4/ 开始生成Class1的核心函数体:__RenderMethod1(System.IO.TextWriter writer, CodeSmith.Engine.Control control),按顺序把模板文件中的执行代码块中的代码块(不包括字符'')原封不动的移植到__RenderMethod1中,把模板文件中不属于执行代码块 及内联表达式的Code转换成writer.Write("Code");把模板文件中的内联表达式的表达式expression转换成writer.Write(expression).
5/ 编译所生成的类Class1
6/ 调用类Class1的__RenderMethod1函数,产生实际代码(就好像Asp.net中,Asp.net的运行框架对于每个Request,都产生Html脚本).

通过以上分析,大家就觉得CodeSmith的实现原理相对比较简单,和Asp.net的产生Html脚本的原理基本一致(大家可以比较一下CodeSmith产生的Compiled Source和Asp.net的Page Compilation Source). 到此位置, 就有人会想,如果没有CodeSmith,可否通过Asp.net代替CodeSmith来使用?当然答案是完全肯定的.只是CodeSmith带给我们比较多的便利(比如访问DBSchema功能函数,属性值设置等等,直接编译并生成Code),而使用Asp.net作为代码生成器相对比较复杂(起码要创建一个Web虚拟目录,设计一个Aspx模板文件,用IE请求获得asp.net生成的HTML脚本)并且还要添加一些类似CodeSmith扩展功能,工作量也是不小的,有兴趣的朋友可以尝试一下.

另外补充说明一下在CodeSmith2.6版本中, 编译错误的错误代码行数是指Compiled Source的行数,而不是指原来的模板文件中的行数, 在CodeSmith 3.0中已经是指向原来的模板文件中的行数(这点已经和Asp.net的Page Compilation Source一模一样了, 通过预处理命令:#line实现的 )

一些好的CodeSmith的模板文件可以从http://www.ericjsmith.net/codesmith/forum/default.aspx?f=16&p=1&ord=vd下载...

共享自动生成DTO/DataAccess/BizObject的CodeSmith模板
如果你有什么代码模板,可以与我们共享吗,我打算搞一个CodeSmith模板共享的团队,共享我们的模板(CodeSmith论坛上已经有很多了)。
只要你点击一下按钮,DTO对象及其集合类、数据访问类、业务层类的部分代码自动生成,形成Model、DataAccess、Biz三个目录,并生成相应的各个类文件。
MyTemplates.rar

前提:
1、建立数据库的各个表,最好以复数形式给表命名。
2、设定表的主键。
3、设定表的外键。
4、建立表的索引。

主要特点:
1、支持一对多和多对一关系。
2、支持like查询。

用法:
1、完成"前提"中提到的各步。
2、用AllStoredProcedures.cst生成所有存储过程
3、用Model\Bulk.cst生成所有文件

不足:
1、刚建立,还没来的及详细测试。
2、模板里的ModelObject.cst还没有用
3、BizObject.cst还没有发布。
(里面虽然有制作自己的EnterpriseLibrary应用程序块的模板但没有内容,过段时间在给出)


大家有什么好的架构,我可以帮着建立模板,同时希望对我建立的这个模板提出更多的意见。



分享到:
评论

相关推荐

    codesmith nettiers-2.3.1.zip codesmith 模板

    codesmith nettiers-2.3.1.zip codesmith 模板codesmith nettiers-2.3.1.zip codesmith 模板codesmith nettiers-2.3.1.zip codesmith 模板codesmith nettiers-2.3.1.zip codesmith 模板codesmith nettiers-2.3.1.zip...

    CodeSmith+注册码(注册机)

    CodeSmith+注册码(注册机)CodeSmith+注册码(注册机)CodeSmith+注册码(注册机)CodeSmith+注册码(注册机)CodeSmith+注册码(注册机)CodeSmith+注册码(注册机)CodeSmith+注册码(注册机)CodeSmith+注册码...

    CodeSmith教程[全].pdf CodeSmith教程[全].pdf CodeSmith教程[全].pdf

    CodeSmith教程[全].pdf CodeSmith教程[全].pdf CodeSmith教程[全].pdf CodeSmith教程[全].pdf CodeSmith教程[全].pdf CodeSmith教程[全].pdf CodeSmith教程[全].pdf CodeSmith教程[全].pdf CodeSmith教程[全].pdf ...

    MySql数据库CodeSmith模板

    MySQL数据库CodeSmith模板是一种高效的代码生成工具,它利用CodeSmith的强大功能,自动化地根据MySQL数据库中的表结构生成相应的代码,从而极大地提高了开发效率。CodeSmith是一款流行的数据驱动的代码生成器,它...

    CodeSmith

    CodeSmith是一款强大的代码生成工具,尤其在ASP.NET和C#开发环境中被广泛使用。它能够自动根据数据库中的表结构生成C#实体类,极大地提高了开发效率,减少了手动编写重复代码的工作量。 首先,CodeSmith的核心功能...

    CodeSmith 6.0 + 序列号

    CodeSmith是一款强大的代码生成工具,尤其对于程序员和开发团队来说,它能显著提高开发效率,减少重复编写基础代码的工作量。在标题中提到的"CodeSmith 6.0 + 序列号",指的是该软件的第六个主要版本,并且提供了一...

    CodeSmith初学者教程

    CodeSmith是一款强大的代码生成工具,尤其对于asp.net开发者而言,它极大地提高了开发效率,帮助程序员从繁琐的手动编码工作中解放出来。本教程专为初学者设计,旨在引导你快速掌握CodeSmith的基本用法和高级特性。 ...

    Java 代码生成器CodeSmith是一个好工具

    CodeSmith 是一种基于模板的代码生成工具,它使用类似于 ASP.NET 的语法来生成任意类型的代码或文本。与其他许多代码生成工具不同,CodeSmith 不要求您订阅特定的应用程序设计或体系结构。使用 CodeSmith,可以生成...

    解决CodeSmith 8.0生成mysql实体没有字段注释和表注释,亲测好用

    CodeSmith是一款强大的代码生成工具,尤其适用于快速生成数据库相关的实体模型、数据访问层以及业务逻辑层代码。在本文中,我们将深入探讨如何解决在使用CodeSmith 8.0时遇到的MySQL实体没有字段注释和表注释的问题...

    CodeSmith 生成工具 6.5 (可生成Nhibernate)

    CodeSmith是一款强大的代码生成工具,尤其在快速开发领域有着广泛的应用。版本6.5是它的一个重要里程碑,其中包含了对Nhibernate框架的支持,这使得开发者能够更高效地生成与Nhibernate配合的实体类和数据访问层代码...

    CodeSmith代码生成器

    CodeSmith是一款强大的代码生成工具,尤其在提升软件开发效率方面有着显著的作用。它允许开发者通过模板语言来定制自己的代码生成规则,从而自动化地创建出符合特定项目需求的源代码。这款工具广泛应用于国内的开发...

    简单的CodeSmith模板

    "简单的CodeSmith模板"这个主题意味着我们将探讨如何创建一个基础的CodeSmith模板,以理解其工作原理和基本语法。 首先,让我们深入了解CodeSmith模板。模板是CodeSmith的核心,它是由CST(CodeSmith Template)...

    CodeSmith8.0.1连接PostgreSQL报错问题解决

    在IT行业中,数据库连接是开发过程中的重要环节,特别是在使用代码生成工具如CodeSmith时。本文将详述CodeSmith 8.0.1版本在尝试连接到PostgreSQL数据库时遇到的问题,以及如何通过添加必要的DLL文件和理解连接字符...

    CodeSmithProfessional.v5.1.1

    CodeSmith Professional是一款强大的代码生成工具,它为程序员和软件开发者提供了高效的代码自动化生成解决方案。这款软件结合了Power Design,使得数据库设计与代码生成之间的工作流程更为顺畅,极大地提高了开发...

    CodeSmith 8.0 可用且说明详细

    详细安装说明,亲测可用,可对任何ASCII语言生成代码模板。CodeSmith Generator 8.0.1生成器是一个软件开发工具,以帮助您更快地完成工作。从技术上讲它是一个模板驱动的源代码生成器,可以自动创建通用应用程序

    CodeSmith三层模板

    CodeSmith是一款强大的代码生成工具,尤其在快速构建企业级应用的三层架构方面表现突出。它通过自定义模板,能够帮助开发者高效地生成数据访问层(DAL)、业务逻辑层(BLL)以及表现层(UI)的代码,显著提高开发...

    CodeSmith5.01破解版(CodeSmith Professional 5.0.1.4983)

    CodeSmith 是一种基于模板的代码生成工具,它使用类似于 ASP.NET 的语法来生成任意类型的代码或文本。与其他许多代码生成工具不同,CodeSmith 不要求您订阅特定的应用程序设计或体系结构。使用 CodeSmith,可以生成...

    Codesmith6.zip

    CodeSmith 是一种基于模板的代码生成工具,它使用类似于 ASP.NET 的语法来生成任意类型的代码或文本。与其他许多代码生成工具不同,CodeSmith 不要求您订阅特定的应用程序设计或体系结构。使用 CodeSmith,可以生成...

    CodeSmith IBatis1.92模板

    CodeSmith是一款强大的代码生成工具,它能够帮助开发者自动生成各种编程语言中的常见代码,极大地提高了开发效率。在本案例中,我们关注的是"CodeSmith IBatis1.92模板",这表明它是一个专用于生成IBatis框架相关...

    codesmith生成实体类简单模板

    《使用Codesmith生成C#实体类的简易模板详解》 在软件开发过程中,尤其是在与数据库交互的业务逻辑层,实体类的创建是一项繁琐且重复的工作。 Codesmith是一款强大的代码生成工具,它允许开发者通过定制模板来自动...

Global site tag (gtag.js) - Google Analytics