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

时间:2008-09-18 15:30:15

标签: java .net database code-generation

我使用过MyGeneration,我喜欢它来生成使用Microsoft的数据访问应用程序块为我的数据访问层创建的代码,并保持我的数据库概念与我正在建模的域同步。虽然,在一个周末花了比预期更陡峭的学习曲线来提高工作效率。

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

http://www.mygenerationsoftware.com

http://www.codesmithtools.com/

其他?

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

谢谢!

27 个答案:

答案 0 :(得分:7)

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

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

www.olegsych.com

codeplex.com/t4toolbox

www.t4editor.net

答案 1 :(得分:3)

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

答案 2 :(得分:2)

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

答案 3 :(得分:1)

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

codesmithtools.com

答案 4 :(得分:1)

我经常使用的两个框架。

Ragel

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

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

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

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

Ragel的另一个重要特性是如何生成基于graphviz的图表,可视化您的状态机。以下是来自Zed Shaw's article ragel州图表的示例。

Ragel State Chart
(来源:zedshaw.com

的XMLBeans

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

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

答案 5 :(得分:1)

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

示例

GenerateDomainInterface'TableName'

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

答案 6 :(得分:1)

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

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

答案 7 :(得分:1)

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

答案 8 :(得分:0)

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

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

答案 9 :(得分:0)

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

答案 10 :(得分:0)

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

答案 11 :(得分:0)

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

答案 12 :(得分:0)

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

答案 13 :(得分:0)

MyGeneration一路走来!

  

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

答案 14 :(得分:0)

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

许多人都推荐使用Codesmith,它看起来确实很好。就个人而言,我需要从代码生成器中轻松修改模板。

答案 15 :(得分:0)

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

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

答案 16 :(得分:0)

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

我写的另一个生成了一个Delphi类来模拟你给它的任何数据库表,但我认为它是code smell,所以我很少使用它。

答案 17 :(得分:0)

代码为.net

答案 18 :(得分:0)

Python

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

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

答案 19 :(得分:0)

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

答案 20 :(得分:0)

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

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

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

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

答案 21 :(得分:0)

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

答案 22 :(得分:0)

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

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

答案 23 :(得分:0)

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

答案 24 :(得分:0)

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

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

答案 25 :(得分:0)

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

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

答案 26 :(得分:0)

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