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

Wiz*_*eup 7 java eclipse code-generation eclipse-emf

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

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

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

Ste*_*n C 7

但你的经历是什么?

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

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

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

您是否曾经遇到过丢失手动编写代码的问题?

只是偶尔.偶尔,您忘记删除"生成的"标记注释,并且在重新生成模型时,您的方法会被破坏.

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

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

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

不.永远不会.


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


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