更改生成的代码或使用继承?

时间:2010-07-07 06:58:05

标签: java eclipse code-generation eclipse-emf

我参与EMF项目。其中一个设计决策不是触及生成的代码而不是检查它。相反,每当需要更改某些内容时,都会创建一个包含更改的子类。该框架足够灵活,可以解决这个问题。但是,我经历了一些工作开销。

设计决策是在糟糕经验的基础上做出的,而其他代码生成框架则重新产生了问题。

作为项目的新手,我想挑战那个设计决定,但我想首先听听一般意见。我知道EMF项目团队建议进行代码内更改。但你的经历是什么? EMF如何处理生成的代码中的手动代码更改?您是否曾经遇到过丢失手动编写代码的问题?代码是否进入了不可维护的状态?

2 个答案:

答案 0 :(得分:7)

  

但你的经历是什么?

我已经实施了两个单独的项目,这两个项目都涉及具有50个或更多模型类的模型,并且在这两种情况下,模型都在项目的整个生命周期中发展;即批次的模型更改。在这两种情况下,我都将生成的代码修改为通常用于实现计算属性,验证以及以各种方式自定义编辑器。

  

EMF如何处理生成的代码中的手动代码更改?

效果很好。有时,生成器会生成由于某些模型更改而无法编译的代码,但修复程序通常很简单;例如删除Java类/接口,死导入等。

  

你有没有忘记手动编写的代码?

只是偶尔。偶尔你会忘记删除“生成的”标记注释,当你重新生成模型时,你的方法会被破坏。

(我想如果这是一个主要问题,你可以修改EMF生成器,以便在合并更改之前始终备份源树。)

我想最令人恼火的是生成的代码必须格式化。 遗憾的是,Eclipse代码格式化程序非常糟糕,但如果您手动重新格式化, 下次重新生成时,您的格式更改会被破坏。但这只是令人恼火......不值得跳过篮球以避免。

  

代码是否进入不可维护的状态?

不。永远不会。


阅读consta_a的回答提醒我,我总是将生成的EMF类检查为版本控制。这是避免长期失去手工编辑的最佳方法。


2018年更新:我所谈论的2个EMF项目发生在2008年之前。从那时起,EMF世界的情况可能已经发生了变化。我没有跟踪。

答案 1 :(得分:0)

我确认Stephen C回答:在我们的例子中,我们在模型中处理了大约120个类,这意味着120个接口+ 120个实现类+无数的编辑类,并且重新生成相当顺利(如果我们可以轻松地将生成的类格式化为我们想要(^ _ ^))

提示:如果您害怕丢失一些手工制作的代码,最好将代码保存在存储库中。每次进行更改时,您都可以轻松地与以前的版本进行比较,并查看更改内容。