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

时间:2020-03-06 14:21:55  来源:igfitidea点击:

我使用了MyGeneration,并且喜欢使用它生成代码,该代码使用Microsoft的Data Access Applicaiton Blocks作为我的数据访问层,并使数据库概念与我正在建模的域保持同步。虽然,一个周末花了比预期更长的学习曲线才能使它富有成效。

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

http://www.mygenerationsoftware.com

http://www.codesmithtools.com/

其他的?

大约在2000年,我工作的公司使用了Veritas Software(我相信是)的产品来建模组件并生成集成组件(dll)的代码。我没有太多的经验,但是似乎很长一段时间以来,代码生成一直是"圣杯"。实用吗?别人如何使用它?

谢谢!

解决方案

我用过CodeSmith。很有帮助。

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

codesmithtools.com

我已经成功使用LLBLGen和nHibernate生成了Entity和DAL层。

如果数据库是模型,那么SubSonic具有出色的代码生成器,从v2.1开始,它不再需要ActiveRecord(我们可以改用Repository Pattern)。它的灵活性不如其他工具,但是可以在库存模板中进行自定义。

我喜欢用
亚音速。我认为,开源是代码生成的一种方式,因为修改模板和核心非常容易,因为它们总是容易出错,或者我们想要做的一两个东西没有内置。

我已经在矢量数学库中将代码生成用于复杂函数。我为此使用了自定义的PERL脚本。我看过的FLOSS生成器似乎都不适合创建swizzle函数

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

我曾经用过CodeSmith和MyGeneration,但都不是太热衷于使用,使用起来有点紧缩,学习模板语言等。

SubSonic是我们有时在这里用来生成数据访问层的东西。在合适大小的项目中使用,它是一种节省时间的绝佳工具。可疑的

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

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

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

T4是Microsoft的CodeSmith杀手!

去看看吧。 Microsoft不想破坏他们的合作伙伴,所以他们不做广告,但这是不容忽视的事情,它是ITS FREE,并安装在Visual Studio 2008中。

www.olegsych.com

codeplex.com/t4toolbox

www.t4editor.net

我认为代码生成是有害的,因为它会使代码库肿,而无需添加新的逻辑或者见解。理想情况下,应该提高抽象级别,使用数据文件,模板或者宏等,以避免生成大量的样板代码。它可以快速完成工作,但从长远来看会损害可维护性。

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

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

LLBLGen Pro是一款出色的工具,可让我们编写数据库不可知的解决方案。很快就能掌握基本功能。高级功能并不是更具挑战性的。我强烈建议我们检查一下。

我曾在一家网络代理公司担任主要开发人员四年,就像我从头开始撰写的前两个或者三个网站一样,我很快意识到,要始终做到这一点将是非常无聊的任务。因此,我开始编写自己的网站生成器引擎。

我的出发点是该网站http://www.codegeneration.net/。我以他们的示例为例,进行了简单的分类,并扩展到使用它生成整个网站的水平。

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

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

我也认为代码生成是有害的,但前提是我们使用诸如Codesmith和mygeneration之类的第三方工具。我有2个存储过程可生成我的域对象和域接口

例子

GenerateDomainInterface'TableName'

然后我将其复制并粘贴到Visual Studio中。对于那些我不想做的任务而言,它的工作效果非常出色。

我经常使用的两个framworks。

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

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

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

用户Ragel所关注的一些著名项目是Mongrel,这是一个很棒的ruby Web服务器。而Hpricot,一个基于红宝石的html解析器,受到了jQuery的启发。

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

拉格尔状态图http://www.zedshaw.com/tips/HelloMachine_small.png

XMLBeans是基于Java的xml绑定。它的工作流程非常好,我经常使用它。

XMLBeans将描述模型的xml模式处理为代表该模型的一组Java类。我们可以以编程方式创建模型,然后将它们与xml进行序列化。

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

Python。

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

通常,生成其他代码的代码往往就其本质而言更难以遵循。 Python的更干净的语法通过使其比C#中的等效语言更具可读性和可维护性而极大地帮助了我们。

.NET的Codesmith

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

我写的另一个代码生成了一个Delphi类,该类为我们提供的任何数据库表建模,但是我认为这样做是有代码味的,因此我很少使用它。

在公司,我们编写了自己的代码,以生成大多数实体/ dalc /业务类以及相关的存储过程,因为它只花了一点时间,并且我们有一些特殊要求。尽管我敢肯定我们可以使用现有的生成器实现相同的功能,但这是一个有趣的小项目。

Codesmith受到了很多人的推荐,而且看起来确实不错。就个人而言,我从代码生成器中所需要的只是使修改模板变得容易。

MyGeneration一路走好!

MyGeneration is an extremely flexible template based code generator written in Microsoft.NET. MyGeneration is great at generating code for ORM architectures. The meta-data from your database is made available to the templates through the MyMeta API.

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

SubSonic很棒!查询功能易于掌握,并且存储过程的实现确实很棒。我可以继续下去。它使我们立即高效。

当需要代码生成时,我主要在Cand中进行编码,当源代码可以更简单地转换为XML或者ruby脚本时,则在XLST中进行。

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

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

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

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