“生成的代码”应该只用于脚手架吗?

时间:2010-02-15 09:35:07

标签: code-generation

当系统生成系统使用的源代码时,该代码是否应仅用于用户“填充空白”的脚手架(如在rails中),或者是否存在生成的代码的情况除了代码生成器之外,任何人都不会修改。

7 个答案:

答案 0 :(得分:6)

根据我的经验,生成与您生成框架代码的系统相比,您不应该触及的代码更为常见。两种方法都很好,但它们解决了不同的问题。以下是您不应触及的生成代码的一些示例:

  • rpcgen
  • 生成的RPC代码
  • protobuf
  • 生成的(de)序列化程序
  • C / C ++编译器生成的汇编代码
  • xsd.exe
  • 生成的.NET XML映射代码
  • Swig
  • 生成的绑定胶水代​​码
  • 由设计师工具生成的GUI代码。

答案 1 :(得分:2)

这取决于您的代码生成器:

  • 如果代码生成是一个破坏性的过程(即,丢失的任何内容都会丢失),则不应修改生成的代码。

  • 如果代码生成允许在代码生成过程中填写空白并记住其内容,则可以将其用作脚手架(只要您只更改已识别的空白)。

答案 2 :(得分:2)

good code generator是基于模板的,而不是像上面所述的黑盒子解决方案。它还应该让您在不丢失更改的情况下智能地主动重新生成。我认为代码生成器应该是两者,它应该允许一个封闭的(只读但可修改的)系统,同时允许功能或行为在需要时通过模板进行更改。

让我们把它放到透视中...如果某个东西是一个完整的黑盒子而且你不应该修改它...这基本上说它在大多数情况下有效,所以甚至不要触摸它或看它。我认为这是一种糟糕的方法,因为当你被锁定在一个解决方案中时,你不知道它可能具有的实现或任何有害的副作用......请记住,有100种方法可以解决问题。

由于 -Blake Niemyjski

答案 3 :(得分:1)

如果使用Netbeans在Java中创建GUI,则代码中的某些部分不应由开发人员更改,否则GUI构建器将无法正常工作。

我想这就是这种情况,并且(大多数?)GUI构建器以这种方式工作。

答案 4 :(得分:1)

没有人正确回答这个问题。

通常 - 用户永远不会触及生成的代码,以防它重新生成,覆盖所有用户更改。

如果这是一代又一代,永远不会再做,那么一定要改变它。但是,如果您的语言支持它,请在单独的文件中进行更改(例如,C#允许您将一个类跨越多个文件,作为“部分”类)。

答案 5 :(得分:1)

值得注意的是,.NET的许多代码生成器都使用.NET“部分类”机制。这允许实际生成的代码保持不变,同时允许开发人员以不会被以后的代码重新生成覆盖的方式添加到生成的类中。

除了生成代码中的继承和虚拟成员之外,还可以使用它来提供相当大的灵活性,同时允许代码生成器指定代码的结构以及填充基本功能。

答案 6 :(得分:0)

如果您不接触生成的代码,除了新添加的部分之外,您不能继续使用生成器直到开发过程结束。作为开发人员,我应该在进行项目开发时使用代码生成器。 Zontroy是满足这一要求的一个很好的例子。使用"保护块"您可以在生成的文件中保护自定义代码的安全。因此,您可以在需要时重新生成所有代码文件。