Micro Code Generation被认为是有害的吗?

时间:2009-01-08 17:56:50

标签: code-generation

我最近编写了一个小工具来为每个层级生成一个类,我为无聊的“数据形式”工作编写,我花费了近90%的时间(令人沮丧,我知道)...更多关于此经济好转;)

我的问题是这个 - 使用这个工具而不是手工打字所有这些代码日复一日实际上伤害了我作为开发人员?我觉得我总是会对这个工具进行更改,因此我“应该”保持在所使用的模式/选择等等之上......但是我的一小部分感觉我可能会失去优势......我错了?

16 个答案:

答案 0 :(得分:18)

如果该工具可以不假思索地吐出代码,那么它可能会为您节省大量的轻率打字。

首先编写工具需要思考,所以我猜你会更加“处于边缘”维护和编写工具。

答案 1 :(得分:10)

那很好!当然,编写一个工具来为你完成所有工作是不可能的,也是错误的。

自动执行可重复的任务总是好的 - 有时候编写特定类型的代码是可重复的。

在“务实的程序员”一书中鼓励甚至

确保在源代码管理中已经检入了代码生成器并且其输出(除非您以后必须手动修改代码)!

答案 2 :(得分:7)

你绝对没错。我在任何地方使用代码生成器 - 我目前使用CodeSmith通过查看数据库来创建我的DAO。

你害怕失去什么优势?在我看来,代码生成实际上是给予你一个优势。

答案 3 :(得分:4)

Larry Wall(Perl成名)描述了编程为懒惰,急躁和傲慢的三大主要美德。

恭喜!你已经表现出了很好的懒惰,因为你已经确定了一些可以传递给自动化过程的工作并且这样做了。 (糟糕的懒惰导致偷工减料,拖延,并且通常推迟而不是消除工作。)如果你能成功地将一些工作转移到另一个项目上,你就会花更少的时间来讨厌烦人的事情,而更多的时间来完成事情和学习。

答案 4 :(得分:2)

生成你能做的。代码生成是我在过去2或3年内获得的最佳工具之一。一遍又一遍地键入相同的代码(或复制并粘贴它)很容易出错。

答案 5 :(得分:2)

通过让别人/别人做某事来减少做某事的时间,而花更多时间研究更好的方法,通常会以更好的方式做到这一点。

这不仅仅适用于编程......

答案 6 :(得分:2)

你的代码生成器(至少在原则上 - 我自己没有看过)是正确的事,至少就它而言。

下一步是看看是否可以创建一个功能与生成的代码匹配的基类,而不是生成所有这些冗余代码,然后从中派生应用程序代码。使用继承而不是生成将允许您从改进中受益,而无需在所有项目上重新运行生成器。也许更重要的是,如果您自定义生成的代码,如果重新运行生成器,自定义将丢失,但在更改基类时,将保留派生类中的自定义。

答案 7 :(得分:1)

没有。为什么你认为IDE如此受欢迎。想象一下,如果所有使用Visual Studio的人都必须在没有IDE帮助的情况下以编程方式创建GUI,那就太糟糕了。我愿意打赌大多数使用VisualStudio的人都不知道如何手动创建他们在IDE中创建的表单。但这并没有错。

答案 8 :(得分:1)

我相信代码生成尽可能消除编程的死记硬背任务。你不会失去优势,你可能会成为一个更好的程序员,因为你会花更多的时间来处理重要而有趣的事情。

顺便说一句,你的工具听起来很有趣。你有没有在任何地方发布它?

答案 9 :(得分:1)

只要您了解自己生成的内容,代码生成就可以了。物理学家使用计算器,因为他们了解自动化的公式,并意识到他们的宝贵时间可以更好地用于重要任务。

答案 10 :(得分:1)

代码生成是实用程序员所倡导的非常宝贵的 DO:s 之一。我真的推荐那本书。这是一个Pragmatic Programmer quick ref

答案 11 :(得分:1)

代码生成几乎虚伪。在这里,我们自动执行传统上手工完成的所有这些任务......但是我们中的许多人仍然会动摇我们的所有代码,即使它很容易生成。

答案 12 :(得分:1)

我唯一的代码生成经验是Common Lisp的宏。它们一直在使用。使重复性任务自动化的一切都是有益的;这就是编程的目的。

阅读story of Mac

答案 13 :(得分:1)

想象一下,每次对工具进行更改并重新生成代码时,您都会在所有模块上手动更改设计。

由于我已经开始生成代码并且加快了速度,我发现我很少在生成的代码中出现错误。

答案 14 :(得分:1)

我发现编写代码可以帮助我了解优秀架构的细微差别。您开始看到常见的图案,而不是狭隘的设计视图。也就是说,不要使用代码生成代替良好的面向对象代码,并且不要太喜欢你的代码,否则你会忽略新技术。例如,如果您使用的是.NET并且正在编写用于数据访问的代码,那么最好不要使用Linq to SQL或NHibernate。同样,动态数据可以在许多形式上的数据场景中提供帮助。所以,我的建议是:根据需要加入新东西和代码。

答案 15 :(得分:1)

我对代码生成的看法是,它在重构中的使用也很重要。我发现部分类和一个好的文件比较实用程序(Araxis或BeyondCompare)是必不可少的。

将生成的代码保存在一个文件中,并将您为该类创建的自定义调整保存在另一个文件中。

这种做法将使您能够快速实施全面的框架更改,并且还可以帮助您转换到新的范例,同时轻松保存自定义逻辑。

CodeSmith FTW!

虽然构建服务器非常适合确保所有代码编译,但它并不能解决签名与存储过程等之间的差异。如果您经常运行代码生成,则可以更轻松地识别何时发生这些更改。单元测试会告诉你SP是错误的,代码将告诉你如何使它正确。