`
nathan09
  • 浏览: 143300 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

代码生成器

 
阅读更多

代码生成器

当木匠面临一再地重复制作同一样东西的任务时,他们会取巧。他们给自己建造夹具或模板。一旦他们做好了夹具,他们就可以反复制作某样工件。夹具带走了复杂性,降低了出错的机会,从而让工匠能够自由地专注于质量问题。

  作为程序员,我们常常发现自己也处在同样的位置上。我们需要获得同一种功能,但却是在不同的语境中。我们需要在不同的地方重复信息。有时我们只是需要通过减少重复的打字,使自己免于患上腕部劳损综合症。


  以与木匠在夹具上投入时间相同的方式,程序员可以构建代码生成器。一旦构建好,在整个项目生命期内都可以使用它,实际上没有任何代价。

Write Code That Writes Code!

编写能编写代码的代码!

  代码生成器有两种主要类型:

1. 被动代码生成器只运行一次来生成结果。然后结果就变成了独立的——它与代码生成器分离了。在198页的邪恶的向导中讨论的向导,还有某些CASE工具,都是被动代码生成器的例子。

2. 主动代码生成器在每次需要其结果时被使用。结果是用过就扔的——它总是能由代码生成器重新生成。主动代码生成器为了生成其结果,常常要读取某种形式的脚本或控制文件。

被动代码生成器

  被动代码生成器减少敲键次数。它们本质上是参数化模板,根据一组输入生成给定的输出形式。结果一经产生,就变成了项目中有充分资格的源文件;它将像任何其他文件一样被编辑、编译、置于源码控制之下。其来源将被忘记。

  被动代码生成器有许多用途:

创建新的源文件:被动代码生成器可以生成模板、源码控制指示、版权说明以及项目中每个新文件的标准注释块。我们设置我们的编辑器,让它在我们每次创建新文件时做这样的工作:编辑新的Java程序,新的编辑器缓冲区将自动包含注释块、包指示以及已经填好的概要的类声明。

在编程语言之间进行一次性转换:我们开始撰写本书时使用的是troff系统,但我们在完成了15节以后转向了LaTeX。我们编写了一个代码生成器,读取troff源,并将其转换到LaTeX。其准确率大约是90%,余下部分我们用手工完成。这是被动代码生成器的一个有趣的特性:它们不必完全准确。你需要在你投入生成器的努力和你花在修正其输出上的精力之间进行权衡。

生成查找表及其他在运行时计算很昂贵的资源:许多早期的图形系统都使用预先计算的正弦和余弦值表,而不是在运行时计算三角函数。在典型情况下,这些表由被动代码生成器生成,然后拷贝到源文件中。

主动代码生成器

  被动代码生成器只是一种便利手段,如果你想要遵循DRY原则,它们的"表亲"主动代码生成器却是必需品。通过主动代码生成器,你可以取某项知识的一种表示形式,将其转换为你的应用需要的所有形式。这不是重复,因为衍生出的形式可以用过就扔,并且是由代码生成器按需生成的(所以才会用主动这个词)。

  无论何时你发现自己在设法让两种完全不同的环境一起工作,你都应该考虑使用主动代码生成器。

  或许你在开发数据库应用。这里,你在处理两种环境——数据库和你用来访问它的编程语言。你有一个schema,你需要定义低级的结构,反映特定的数据库表的布局。你当然可以直接对其进行编码,但这违反了DRY原则:schema的知识就会在两个地方表示。当schema变化时,你需要记住改变相应的代码。如果某一列从表中被移走,而代码库却没有改变,甚至有可能连编译错误也没有。只有等你的测试开始失败时(或是用户打电话过来),你才会知道它。

  另一种办法是使用主动代码生成器。读取schema,使用它生成结构的源码。现在,无论何时schema发生变化,用于访问它的代码也会自动变化。如果某一列被移走,那么它在结构中相应的字段也将消失,任何使用该列的更高级的代码就将无法通过编译。

你在编译时就能抓住错误,不用等到投入实际运行时。当然,只有在你让代码生成成为构建过程自身的一部分的情况下,这个方案才能工作。

  使用代码生成器融合环境的另一个例子发生在不同的编程语言被用于同一个应用时。为了进行通信,每个代码库将需要某些公共信息——例如,数据结构、消息格式、以及字段名。要使用代码生成器,而不是重复这些信息。有时你可以从一种语言的源文件中解析出信息,并将其用于生成第二种语言的代码。用更简单、语言中立的表示形式来表示它,并为两种语言生成代码,常常更简单。

代码生成不一定要很复杂

  所有这些关于"主动这个"和"被动那个"的谈论可能会给你留下这样的印象:代码生成器是复杂的东西。它们不一定要很复杂。最复杂的部分通常是负责分析输入文件的解析器。让输入格式保持简单,代码生成器就会变得简单。

代码生成器不一定要生成代码

  尽管本节的许多例子给出的是生成程序源码的代码生成器,事情并不是非如此不可。你可以用代码生成器生成几乎任何输出:HTML、XML、纯文本——可能成为你的项目中别处输入的任何文本。

====================================

代码生成器:

==================总体============================
上次在群中一位不知名的家伙,不愿共 享他的代码生成器,于是我准备搜索一下关于代码生成器的东西,不想一搜索还真多,搜索出最多的要算CodeSmith了[试用版30天],这个软件真的不 错,不过由于没有找到3.0版本的序列号,只得再找别的代码生成器。我找的是一个基于网页的东西,用vbscript写的,wawacodepro不过觉 得还不错,而且开源,所以给大家推荐一下。下载地址:http://www.mydown.com/soft/235/235581.html
==================================================

===================CodeSmith======================
下载CodeSmith需要注册一下Email,注册地址是http://www.codesmithtools.com/license.aspx,5分钟后收到下载地址的Email。然后下载即可,只是下载速度有点慢。
在以下地址有关于代码生成器的探讨:
MSDN:http://www.microsoft.com/china/msdn/library/langtool/vsdotnet/realworld11022004.mspx
NickyBlog:http://nicky.blogchina.com/572664.html [强力推荐]
还有针对CodeSmith的文章自己可以搜索一下如果下面的链接不能满足你的需要
3.0新特性:http://www.alphatom.com/content/view/211/39/
官方论坛:http://forum.codesmithtools.com/default.aspx
十种必备工具关于CodeSmith:
http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx?pf=true#EOAA
===================================================

====================CodePlus=======================
易为工作室开发的代码生成器:http://www.codeplus.net/ 专为sql server c#语言设计的代码生成器。
有限量字段[15个]的免费版,不过即便掏钱也买不到源码,还有个人捐赠版和100元/套的版本。不过我看不需要掏钱去买这些东西。虽然他的功能还是蛮强大的。
===================================================

====================CodeMaker======================
asp, jsp,php代码生成工具,自动生成维护数据库信息的动态网页的代码生成器。它可以帮助ASP、JSP、PHP开发人员快速的开发简单的数据库维护程 序。无需任何编码,只需将数据库结构导入到CodeMaker中并做简单的设置,CodeMaker即可生成完整的数据库操作页面。用CodeMaker 可以简单快速的创建网站后台维护程序。提高开发效率数十倍以上。
下载地址:http://www.mhua.com/codemaker/codemaker/codemaker_setup.exe
===================================================

====================还有一个简单的基于nhibernate的=
飞鹰[]的coolcoder,专门为采用nhibernate做关系对象影射架构的系统提供代码的工具,简单易用,虽然不提供源码,我们可以用反编译工具对其反编译看源码。这是个很不错的学习机会。
===================================================

以上种种,均为被动代码生成器,没有花力气去写一个,是因为已经有这么多好的了。

====================『天道酬勤』 的专栏 2005年10月文章 一下内容为2005年10月14日更新
介绍自己的代码生成器有新特点
可以选择模板,这样就可以针对不同的应用写模板生成更加通用的各种代码(包括模型、数据操作、页面等),不过作者没有在blog上提供下载,需向作者本人联系。相比千里独行提供了自己的下载,
====================千里独行
C#做的代码生成器,是一个EXE,使用.NET框架1.1,需要IE6的支持
本程序可解析SQLServer的数据库结构,保存结构信息到XML,然后使用XSLT技术来生成某些代码,用户可自己添加XSL模板文件
程序的下载地址为 http://www.cnblogs.com/Files/yyf9989/CreateCode.rar, 可直接运行
====================菲菲.net
非非.Net代码生成器1.0正式版发布,该生成器的最大特点就是和VS.NET集成的很好,安装插件后直接在.net开发环境中使用生成的代码直接包含在项目中。
====================http://teddyma.cnblogs.com/ Teddy's Chinese Blog20051231更新
没有ORM或代码生成数据就不能持久化了? - 用范型技术代替代码生成!
该文详细说明了利用.net2.0中C#范型达到ORM的效果,字里行间表达了作者对代码生成的自我看法。

====================http://www.codefutures.com/products/firestorm/tutorial/ 20060111更新
这是一个java世界里的工具,我还没有来得及看其效果如何,该站点有详细说明,需要的朋友可以去看看

看完视频了,感觉verygood,可以根据数据库[支持多种数据库]生成指定模板的数据对象、jsp页面、或者基于strus的源代码,最后用ant编译生成的源代码,即可得到所有需要的东西。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics