14

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

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

http://www.mygenerationsoftware.com

http://www.codesmithtools.com/

其他的?

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

谢谢!

4

27 回答 27

7

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

去看看吧。微软不想破坏他们的合作伙伴,所以他们不会做广告,但这是一件不可忽视的事情,它是免费的,并且安装在 Visual Studio 2008 中。

www.olegsych.com

codeplex.com/t4toolbox

www.t4editor.net

于 2008-09-18T15:35:59.630 回答
3

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

于 2008-09-18T15:32:42.103 回答
2

我们使用 Codesmith 并取得了巨大的成功。我现在一直在努力寻找我们可以在哪里实施模板来加速平凡的流程。

于 2008-09-18T15:36:58.520 回答
1

我经常使用的两个框架。

拉格尔

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

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

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

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

Ragel 的另一个重要功能是它如何生成基于graphviz的图表,以可视化您的状态机。下面是取自Zed Shaw 关于 ragel 状态图的文章的示例。

拉格尔状态图
(来源:zedshaw.com

XMLBeans

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

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

于 2008-09-18T16:03:46.130 回答
1

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

codesmithtools.com

于 2008-09-18T15:31:32.090 回答
1

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

于 2008-09-18T15:32:50.747 回答
1

我使用过 CodeSmith 和 MyGeneration,两者都不太热衷,感觉使用起来有些简洁,学习模板语言等。

SubSonic 是我们有时在这里用来生成数据访问层的东西。用于大小合适的项目,它是一个非常棒的节省时间的工具。咔嚓

于 2008-09-18T15:34:29.743 回答
1

我也看到代码生成是有害的,但前提是你使用了 codesmith 和 mygeneration 等 3rd 方工具。我有 2 个存储过程来生成我的域对象和域接口

例子

生成域接口'表名'

然后我只需将其复制并粘贴到 Visual Studio 中。对于我讨厌做的那些任务来说非常棒。

于 2008-09-18T15:55:47.447 回答
0

I worked for four years as the main developer in a web agency, as I wrote from ground-up my first two or three websites, I soon realized that it was going to be a very boring task to do it all the times. So I started writing my own web site generator engine.

My starting point was this site http://www.codegeneration.net/. I took one of their examples for a simple crud generation and extended to the level that i was generating entire sites with it.

I used xml for the definition of various parts of the website (pages, datalists, joins, tables, form management). The generated web sites were completely detached from the generator, so the generated website could also be modified by hand.

Here is their article http://www.codegeneration.net/tiki-read_article.php?articleId=19.

于 2008-09-18T15:42:57.070 回答
0

亚音太棒了!!查询能力很容易掌握,存储过程的实现真的很棒。我可以继续下去。它让您立即高效工作。

于 2008-09-28T20:54:34.753 回答
0

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

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

于 2008-09-28T21:02:39.507 回答
0

我已经使用 Castor 完成了几次一次性的代码生成,以创建基于 XSD 的 Java 源代码。最新的用途是为 Open Travel Association 实现创建 Java 类。OTA Schema 非常复杂,手工操作会很麻烦。考虑到架构的复杂性,Castor 做得很好。

于 2008-09-18T16:19:47.620 回答
0

Outsystems 的敏捷平台可用于生成开源的、有据可查的 C# 和 Java 应用程序。因为它还具有与部署、管理和更改相关的多项功能,所以大多数人最终不仅使用它来生成代码,还使用它来管理 Web 应用程序的整个生命周期。

于 2009-11-18T22:21:32.013 回答
0

一段时间以来,我一直在使用自制的脚本/模板语言进行代码生成。(我使用这种语言主要是为了找到我的小宠物项目的用途)

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

于 2009-11-18T22:26:52.340 回答
0

我用过 CodeSmith。很有帮助。

于 2008-09-18T15:31:11.297 回答
0

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

于 2008-09-18T15:33:14.503 回答
0

我已经在向量数学库中使用代码生成来生成 swizzle 函数。我为此使用了一个自定义的 PERL 脚本。我看过的所有 FLOSS 生成器似乎都不适合创建 swizzle 函数

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

于 2008-09-18T15:33:27.453 回答
0

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

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

于 2008-09-18T15:34:34.203 回答
0

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

于 2008-09-18T15:35:53.467 回答
0

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

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

于 2008-09-18T15:36:12.343 回答
0

LLBLGen Pro 是一款出色的工具,可让您编写与数据库无关的解决方案。掌握基本功能真的很快。高级功能并没有太大的挑战性。我强烈建议您检查一下。

于 2008-09-18T15:39:24.863 回答
0

蟒蛇

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

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

于 2008-09-18T16:40:34.530 回答
0

.net 的 codesmith

于 2008-09-19T13:04:56.653 回答
0

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

还有一个我写的生成一个 Delphi 类,该类对你给它的任何数据库表进行建模,但我认为这样做是一种代码味道,所以我很少使用它。

于 2008-09-19T13:08:18.577 回答
0

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

Codesmith 得到了很多人的推荐,而且它似乎确实是一个不错的选择。就我个人而言,我对代码生成器所需要的只是让修改模板变得容易。

于 2008-09-19T13:12:20.003 回答
0

MyGeneration一路走来!

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

于 2008-09-19T13:27:38.250 回答
0

我使用 myEclipse 中的休眠工具从我的数据模型生成域模型和 DAO 代码。它似乎工作得很好(如果你在 DAO 中编写自定义方法会出现一些问题,这些似乎在覆盖时会丢失),但通常它似乎工作得很好——尤其是与 Spring 结合使用。

于 2008-09-19T13:30:46.090 回答