当前位置:  开发笔记 > Android > 正文

代码生成器坏了吗?

如何解决《代码生成器坏了吗?》经验,为你挑选了5个好方法。

我使用MyGeneration和nHibernate来创建基本的POCO对象和XML映射文件.我听说有些人说他们认为代码生成器并不是一个好主意.目前最好的想法是什么?只是代码生成在生成数千行不可理解的代码时才会变坏吗?



1> ConcernedOfT..:

由代码生成器生成的代码不应(作为概括)在随后由人为干预编辑的情况下使用.一些系统,例如Visual C++的各种化身上的向导生成的代码,程序员随后希望手动编辑.这并不受欢迎,因为它要求开发人员挑选生成的代码,理解它并进行修改.这也意味着生成过程是一次性的.

生成的代码应该与系统中的其他代码存在于单独的文件中,并且只能从生成器生成.生成的代码应该清楚标记,以表明人们不应该修改它.我有机会做一些这样或那样的代码生成系统.所有生成的代码在序言中都有类似的东西:

-- =============================================================
-- === Foobar Module ===========================================
-- =============================================================
--
--         === THIS IS GENERATED CODE.  DO NOT EDIT. ===
--
-- =============================================================

代码生成在行动中是一本关于这个主题的相当好的书.



2> Ewan Makepea..:

代码生成器很棒,坏代码很糟糕.

此页面上的大多数其他响应都是"否,因为生成的代码通常不是很好".

这是一个糟糕的答案,因为:

1)发电机就像其他任何工具一样 - 如果你误用它们,就不要责怪这个工具.

2)开发人员往往会为自己编写出色代码的能力感到自豪,但是你不会将代码生成器用于一个项目.

我们使用代码生成系统在所有Java项目中保持持久性,并且在生产中有数千个生成的类.

作为经理,我爱他们,因为:

1)可靠性:该代码中没有明显的剩余错误.多年来,它经过了如此详尽的测试和改进,而不是在调试时我从不担心持久层.

2)标准化:每个开发人员的代码在这方面都是相同的,因此在从同事那里学习新项目时,一个人学习的代码要少得多.

3)进化:如果我们找到更好的方法,我们可以更新模板并快速一致地更新1000个类.

4)革命:如果我们将来切换到不同的持久性系统,那么每个持久化类具有完全相同的API这一事实使我的工作变得更加容易.

5)生产力:只需点击几下即可从元数据构建持久对象系统 - 这可以节省数千个无聊的开发人员时间.

代码生成就像使用编译器一样 - 在个别情况下,您可能能够编写更好的优化汇编语言,但是对于大量项目,您宁愿让编译器为您做到这一点吗?

我们使用一个简单的技巧来确保始终可以重新生成类而不会丢失自定义:每个生成的类都是抽象的.然后开发人员使用具体类扩展它,添加自定义业务逻辑并覆盖他想要与标准不同的任何基类方法.如果元数据发生变化,他可以随时重新生成抽象类,如果新模型打破了他的具体类,编译器就会让他知道.



3> DMKing..:

我用代码生成器遇到的最大问题是维护期间.如果您修改生成的代码,然后对架构或模板进行更改并尝试重新生成,则可能会出现问题.

一个问题是,如果该工具不允许您保护您对修改后的代码所做的更改,那么您的更改将被覆盖.

我见过的另一个问题,特别是RSA中用于Web服务的代码生成器,如果你过多地更改生成的代码,生成器会抱怨不匹配并拒绝重新生成代码.对于像更改变量类型这样简单的事情,可能会发生这种情况.然后,您将无法生成代码到另一个项目并将结果合并回原始代码.



4> Jay Bazuzi..:

代码生成器可以提高工作效率,但有几点需要注意:

让你以你想要的方式工作.

如果您必须弯曲未生成的代码以适应生成的代码,那么您应该选择不同的方法.

作为常规版本的一部分运行.

输出应生成到中间目录,而不是签入源控件.但是,输入必须签入源控件.

没有安装

理想情况下,您也可以检查工具中的源代码控制.让人们在准备新的构建机器时安装东西是坏消息.例如,如果您进行分支,则希望能够使用代码对工具进行版本控制.

如果必须,请创建一个脚本,该脚本将使用包含源树副本的干净机器,并根据需要配置计算机.请完全自动化.

没有编辑输出

您不必编辑输出.如果输出不够实用,那么该工具不适合您.

此外,输出应清楚地表明它是生成的文件,不应编辑.

可读输出

输出应该写好并格式化.您希望能够打开输出并阅读它而不会有太多麻烦.

#line

许多语言都支持类似#line指令的东西,它允许您将输出的内容映射回输入,例如在生成编译器错误消息或步进调试器时.这可能很有用,但除非做得很好,否则它也会很烦人,所以这不是必需的.



5> Mitchel Sell..:

我的立场是代码生成器并不坏,但很多人使用它们.

如果你使用代码生成器节省时间来编写好的代码,那么很好,但往往没有优化,或者增加了很多开销,在这些情况下我认为这很糟糕.

推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有