您是否使用代码生成工具?(Do you use code generation tools?)

2019-07-18 09:12发布

你(从那些用于生成代理和设计师内置到Visual Studio除外)使用代码生成工具?

哪一部分(S)应用程序的你产生?

你通常推出自己的发电机? 如果是这样,什么类型的发电机,你写(ASP模板,coddom等)。 如果没有,你用什么第三方的工具?

我目前的工作在几个不同的项目至极所有使用自定义的代码生成器,从生成数据库结构,业务实体,DAL和BLL处理一切。 我很好奇其他人的经验是用这些工具。

Answer 1:

我在考虑代码生成是“错误”的哲学阵营,因为它们预示着什么应该做语言的一部分。

但它一直是语用程序员的伦理写一个编写代码的代码的重要组成部分,并在实践中代码生成效果很好,如果生成的代码默认为隐藏。 无论你想怎样哲学纯是,语言永远不会演变为要解决的问题一样快。

当你在Visual Studio中建立一个Windows窗体获取生成的代码想到的。 你可以看一下生成的代码,如果你想要的,但它是一个更好的主意都不到。 移动与WPF的声明措辞优越,但是,因为它是更清洁,更可靠的以编程方式操作声明代码不是命令式的代码。

他们应该做的LINQ到SQL类同样的事情。 他们需要的,仅仅具有属性和没有自定义行为类说明性语言。 它可能会更容易使这些实体类的动态 - 自动更改底层数据库架构更改时。

我们试图用CodeSmith中产生在我们的数据库中所有表.NetTiers类,但遇到了两个问题:

  1. .NetTiers是臃肿,和生成的代码是巨大的。 我认为代码生成工具使它太容易克雷蒂尔·菲普。

  2. 因为架构正在积极制定和修订,我们不得不重新生成了很多,太,这最终使人们很难把一切都在源代码控制,因为所有文件都被再生和替代。 我最终被不确定如果所生成的代码应当在源控制的。

对于代码生成最好的地方应该是在编译或构建阶段,而不是设计阶段。 当您在C#中使用匿名类型或方法,编译器在飞行做代码生成。 如果您在设计阶段生成的代码,你得到的东西块必须每次基本参数变化时再生。



Answer 2:

是的,但我们称它们为实习生。



Answer 3:

这并不是说我们在.net /网络域名正在努力,但来自不同的家庭设计语言自制代码世代工具是我们的开发工具链的重要组成部分。 我们有两个主要的这样的工具(与语法和解析器和正式的定义),以及较小的一个建立在像M4和perl宏的主机。 他们都产生到底,这是本地编译纯C。

特定领域语言是针对我的经验任何大型软件的努力程序员的工作效率的关键工具之一。 如果您正在构建的东西像编译器,仿真器,或其他非常复杂的软件,有不支持的基本语言,在所有(这通常意味着移植的C,有时C ++)许多定期模式,代码生成工具,是要走的路。 我查看特定领域的语言,如泛化下一步:首先,你打破了常见的计算入函数(或子程序是历史),那么你就打破了常见的功能为模板或仿制药,如果这样的设施是可用的,然后你打破出更加通用性和重复的代码放到一个全面的自定义语言。

这是所有关于从编程过程中减少了代码,你实际编写的体积,并移除任何形式的,非增值沉闷的重复和代码。 只要重复的模式,应用领域特定语言!



Answer 4:

我开始我自己的滚动发电机(数据访问,存储过程等)回来的时候我在做传统的ASP工作(大约2001年)。 我慢慢转移到CodeSmith中,因为它是更容易对付。 我主要还是刚刚产生的所有数据访问层类型的东西(包括存储过程)我的.NET代码。

几年前,我从宏代码生成(即CodeSmith中),以微代码生成的跳跃。

不同的是,与CodeSmith中我生成的代码巨大的大片我的应用程序,所有通用的,一次全部。 这成为边缘情况和改变用于模板(即表结构)的来源,当再生问题。 我也碰到了,那里有携带,我没有使用代码的高库存的情况下,但是从我的模板生成。 难道所有这些方法的工作? 也许是,也许不是。 进入和清理生成的代码将是一个巨大的工作量(即经过一年多在同一个代码库)。

微代码生成,相反,使我产生正是我需要的,完全正确的情况下我想的类。 我用这样做的主要工具是ReSharper的。 我这样做的方法是写我的生产代码之前写我的单元测试。 在这种情况下,ReSharper的使用我的单元测试作为模板自动生成生产代码骨架。 然后,它只是一个在填补空白的问题。

对于数据访问,我不再产生任何东西。 我发现一个很好的O / RM取代我曾经把我的数据访问层(即NHibernate的)一切。 鉴于此,我永远不会写或生成在我生命中的另一个数据访问层(我拒绝)。

另外,我得到具有大的单元测试套件的好处,除其他事项外



Answer 5:

由于雾溪软件的内部语言,芥末,已编译时代码生成器内置的,我们用它们来自动创建映射到数据库表的实体类的肉。 因此,而不是写了十几个不同的属性和方法的类,我们可以这样写:

<ActiveRecord("Kiwi")> _
Class CKiwi
End Class

和CKiwi将有负载(IX作为的Int32),提交(),以及用于在用于猕猴桃表其基础架构中定义的每一列的字段/属性。 它使我们不必有巨大的O / RM库,但还是让我们到一个表快速添加到我们的产品。



Answer 6:

代码生成编译器中的精神可以是巨大的。 代码生成的“向导”的精神,均匀原来是一个坏主意。



Answer 7:

我们以前使用的CodeSmith来生成我们NHibernate的HBMS,我们的实体,以及一些其他的东西。 过了一会儿,我们,所以我们抛弃它生病了这种流动的。

T4的发电机是免费的,值得探讨的一代。

我们仍然使用城堡CodeGenerator单轨链接一代。



Answer 8:

  1. 我们使用异常的代码生成器
  2. 生成DAO的CRUD操作
  3. 使用JAXB genereate代码
  4. 使用XDoclet来genereate EJB本地/ home接口
  5. 使用Velocity模板生成的商业模式文件
  6. 使用Apache Axis来生成WSDL存​​根


Answer 9:

我遇到ActiveWriter前几个月,它帮了我很多,我喜欢的是这种方法的灵活性,它会生成处理数据访问问题部分类,它让我编写的类业务的一部分。 我感到非常满意的原因为我节省了大量的工作,it's相当不错的改变模式,重新生成和去。



Answer 10:

我创造了一些任务我自己的工具。 它的有趣的事情,甚至从长远来看,可以节省时间。 对于非常枯燥的任务,它甚至可以节省你的理智。



Answer 11:

自酿的代码生成器构建单元测试从包含的应该是如何工作的例子最终用户的电子表格的情况下工作的伟大。

见模具构建测试案例的一个例子。



Answer 12:

我们使用LLBLGEN生产我们的数据访问层。 您在数据库指向发电机的使用,选择要使用的表和它批量地生产出所需的类。 这是所有非常快速和容易。



Answer 13:

我们有一个内部的内置代码生成器,它利用数据库访问服务。 一个写存储过程和获取网关类抽象相应方法。

我们还以妥善闪存接口生成Web服务 - 即以理智的方式处理异常。

最后,我们有一个例外发生器,带走的例外最佳实践苦差事(吨构造的,等...)



Answer 14:

在以前的雇主,我们有一个本土的VB.NET应用程序,它会变成一个XML模式定义(XSD)文件为静态C ++库。 这使得它更容易使用C ++数据类型(BOOL,的std :: string等)工作,并且所有有趣的XML代码是隐藏这些生成的类里面。



Answer 15:

我们刚刚开始在这里办公使用Grails。 以前,我们有一组内部的JSF / Hibernate的CRUD生成脚本的。

... Grails的获胜。 从Grails的代码生成是非常好的,可以给你一个CRUD应用程序将在大约15分钟,实际上并没有将代码中的代码文件!

当然,它可以生成实际的代码到代码的文件,当你想修改它。 大多数时候,经常CRUD,你可以逃脱只是改变了看法。



Answer 16:

我用一个生成可能在不同的平台(Windows,Linux,Solaris和Mac上,BSD等)进行改革序列化的数据对象。 这是一个内部的解决方案。



Answer 17:

我写了一个可爱的工具,其中在数据格式专家我写一个解析器,可以通过网络的形式提交自己的样品,看输出,并告诉我这是否是正确的。

从这一点,就会产生一个JUnit测试。 可爱。

除了没有一个人费心去使用它,我没有收集测试案例whatseover。



Answer 18:

喜欢这里的一些人,我们也创造了我们的数据存取,HTML表单处理和某些商业逻辑操作自己的代码生成器(INON DATAMANAGER / Viewmanager)。 具有该工作做好的关键是设计,所以你从来没有接触或看生成的代码。

通过这种方式,它几乎成为了语言的一部分 - 语言(Java的在我们的情况下)扩展到包括域模型规范和视图模型,然后你只需填写与真正的Java代码自定义业务逻辑。

这使我们与分析师和商业用户,通信,同时还具有Java的强大功能来设置的基础行为的细节合适的工具。



Answer 19:

如果有兴趣在LLBLGEN,这是优秀的,你也可以评价亚音速。 甚至看到罗布科纳不得不说的亚音速和T4之间的重叠或相互影响。



Answer 20:

我写的,并使用一个基于XSLT的代码生成工具。 http://perfectstorm.codeplex.com/

这将使用一个根XML模型以产生DAL,特效,表格。



Answer 21:

我创建了一个自定义代码生成框架,在几种语言,比如Java脚本,动作脚本,Java和C#和Objective C,我不使用模板或工具,用一些辅助类生成的代码只是普通的C#代码生成Web服务代理类,代码生成确实可以节省很多时间,但我认为生成的代码应该尽可能简单,不应该被过度使用。



文章来源: Do you use code generation tools?