你生成代码吗? 如果是这样,你使用了什么,你产生了什么?

我已经使用了MyGeneration,我喜欢它来生成使用Microsoft的数据访问应用程序块为我的数据访问层设置代码,并保持我的数据库概念与我正在建模的域同步。 尽管如此,一个周末的学习曲线比预期更陡峭,以使其富有成效。

我想知道其他人在做什么与代码生成有关。

http://www.mygenerationsoftware.com

http://www.codesmithtools.com/

其他?

早在2000年左右,我所工作的公司就使用了Veritas Software的产品(我相信它)来模拟组件并生成集成组件(dll)的代码。 我没有获得很多经验,但似乎代码生成长期以来一直是“圣杯”。 这是实用的吗? 其他人如何使用它?

谢谢!

T4是微软的CodeSmith杀手!!!!

去看看吧。 微软不想破坏他们的合作伙伴,因此他们不会宣传它,但这是一件值得考虑的事情,它是免费的,并且安装在Visual Studio 2008中。

http://www.olegsych.com

codeplex.com/t4toolbox

http://www.t4editor.net

我已成功使用LLBLGen和nHibernate来生成实体和DAL层。

我们使用Codesmith并取得了巨大的成功。 我现在不断尝试找到我们可以在哪里实现模板来加速普通流程。

我已经完成了CSLA的工作,并使用codemith使用CSLA模板生成我的代码。

codesmithtools.com

如果您的数据库是您的模型, SubSonic有一个优秀的代码生成器,从v2.1开始,不再需要ActiveRecord(您可以使用存储库模式)。 它的灵活性不如其他,但可以在库存模板中进行自定义。

我使用过CodeSmith和MyGeneration,并不是过于热衷于使用,感觉有点简洁,学习模板语言等。

SubSonic是我们有时用来生成数据访问层的东西。 用于合适尺寸的项目,它是一个很棒的节省时间的工具。 clicky

我看到代码生成也有害,但只有你使用第三方工具,如codesmith和mygeneration。 我有2个存储过程来生成我的域对象和域接口

GenerateDomainInterface’TableName’

然后我将其复制并粘贴到visual studio中。 对于我讨厌做的那些任务来说,它非常棒。

我经常使用的两个框架。

Ragel

值得一试的是Ragel 。 它用于为状态机生成代码。

您只需在源代码中添加一些简单的标记,然后在Ragel上运行生成器生成C,C ++,Objective-C,D,Java和Ruby的代码,并且很容易将它与常规源混合使用。

Ragel甚至允许您在状态转换等上执行代码。 它使创建文件格式和协议解析器变得容易。

用户Ragel的一些值得注意的项目, Mongrel ,一个伟大的ruby Web服务器。 和Hpricot ,一个基于ruby的html解析器,有点受jQuery的启发。

Ragel的另一个重要特性是它如何生成基于graphviz的图表,可视化您的状态机。 以下是Zed Shaw关于ragel状态图表的 文章中的一个例子。

Ragel State Chart http://sofzh.miximages.com/java/HelloMachine_small.png

XMLBeans的

XMLBeans是一个基于java的xml绑定。 它有一个很棒的工作流程,我经常使用它。

XMLBeans将描述模型的xml模式处理成一组表示该模型的java类。 您可以以编程方式创建模型,然后将它们与xml串行连接。

我使用过CodeSmith。 非常有帮助。

我喜欢使用SubSonic 。 我认为开源是代码生成的方式,因为它很容易修改模板和核心,因为它们总是容易出错或者你想要做的一两件不是内置的东西。

我在矢量数学库中使用了代码生成来实现swizzle函数。 我使用了自定义PERL脚本。 我看过的所有FLOSS生成器似乎都不适合创建混合函数

我通常使用C ++模板,而不是代码生成。

我主要使用LLBLGen Pro来生成代码。 它提供了各种用于生成的模式,您可以提供自己的模式,就像CodeSmith一样。 客户支持非常好。

基本上,我使用LLBLGen生成我的业务对象和DAL并使它们保持最新。 代码模板有一些部分,您可以在其中添加自己的逻辑,这些逻辑在重新生成期间不会被清除。 这绝对值得一看。

我们使用linq和XML文字(VB)定制代码生成。 我们还没有找到将解决方案分解为模板的方法; 然而,这两项技术使这项任务变得微不足道,我认为我们不会这样做。

我认为代码生成是有害的,因为它膨胀代码库而不添加新的逻辑或洞察力。 理想情况下,应该提高抽象级别,使用数据文件,模板或宏等,以避免产生大量的锅炉板代码。 它可以帮助您快速完成任务,但从长远来看会损害可维护性。

如果您选择的编程语言通过从某种模板语言生成而变得不那么痛苦,那么这似乎表明您可以通过在另一种可能更具动态性的语言中执行更高级别的工作来节省更多时间。 因人而异。

LLBLGen Pro是一个出色的工具,它允许您编写与数据库无关的解决方案。 获取基本function非常快。 高级function并不具有挑战性。 我强烈建议你看看。

我作为网络代理商的主要开发人员工作了四年,正如我在前两三个网站上写的那样,我很快就意识到,一直这样做是非常无聊的任务。 所以我开始编写自己的网站生成器引擎。

我的出发点是这个网站http://www.codegeneration.net/ 。 我把他们的一个例子用于简单的crud生成并扩展到我使用它生成整个站点的级别。

我使用xml来定义网站的各个部分(页面,数据表,联接,表格,表单管理)。 生成的网站与生成器完全分离,因此生成的网站也可以手动修改。

这是他们的文章http://www.codegeneration.net/tiki-read_article.php?articleId=19 。

我使用Castor完成了几次一次性的代码生成,以创建基于XSD的Java源代码。 最新的用途是为Open Travel Association实现创建Java类。 OTA架构非常多毛,本来可以用手做熊。 鉴于架构的复杂性,Castor做得非常好。

Python 。

我使用了MyGeneration,它使用C#编写代码模板。 但是,我开始使用Python,我发现我可以编写代码,使用该语言生成其他代码的速度比使用C#编写时更快 。 随后,我使用Python来编写C#,TSQL和VB代码。

通常,生成其他代码的代码往往更难以遵循其本质。 Python的清晰语法通过使其比C#中的等效语言更具可读性和可维护性而有很大帮助。

代码为.net

我编写了一个实用程序,您可以在其中指定一个表,并生成一个Oracle触发器,用于记录该表的所有更改。 使记录非常简单。

还有一个我写的,它生成了一个Delphi类来模拟你给它的任何数据库表,但我认为它是一个代码味道 ,所以我很少使用它。

在公司,我们自己编写了生成大部分实体/ dalc /业务类和相关存储过程,因为它只花了一点时间,我们有一些特殊要求。 虽然我确信我们可以使用现有的生成器实现同样的目标,但这是一个有趣的小项目。

Codesmith被很多人推荐,看起来确实很好。 就个人而言,我需要从代码生成器中获得的所有内容都是为了方便修改模板。

我使用myEclipse中的hibernate工具从我的数据模型生成域模型和DAO代码。 它似乎工作得很好(如果你在DAO中编写自定义方法会有一些问题,这些问题似乎在重写时会丢失),但通常看起来效果很好 – 特别是与Spring结合使用时。

SubSonic很棒!! 查询function易于掌握,存储过程实现真的很棒。 我可以继续下去。 它让你立刻变得高效。

我主要用C#编写代码,当我需要代码生成时,我在XLST中执行它,当源代码可以简单地转换为XML或者更复杂的ruby脚本时。

如果代码生成部分需要经过多个开发人员的频繁修改,CodeSmith工作得很好(并且比新开发人员更容易学习XSLT或ruby)。

Outsystems的敏捷平台可用于生成开源,记录良好的C#和Java应用程序。 由于它还具有与部署,管理和更改相关的若干function,因此大多数人最终不仅使用它来生成代码,而且实际上管理Web应用程序的整个生命周期。

有一段时间,我使用了自己开发的脚本/模板语言来生成代码。 (我使用这种语言主要是因为没有其他原因,而不是找到我的小宠物项目使用)

最近,我创建了一些SQL * PLUS脚本来创建数据库访问代码(对我们来说没有Hibernate …)

MyGeneration一路走来!

MyGeneration是一个用Microsoft.NET编写的极其灵活的基于模板的代码生成器。 MyGeneration非常适合为ORM架构生成代码。 数据库中的元数据通过MyMeta API提供给模板。