修改生成的代码还是使用继承?

7
我在一个EMF项目中工作。其中一个设计决策是不触及生成的代码,也不将其检入。相反,每当需要更改时,就会创建一个包含更改内容的子类。该框架足够灵活以处理此类情况。然而,我遇到了一些额外的工作负担。
这个设计决策是基于使用其他代码生成框架时出现的问题而做出的。
作为项目的新成员,我想挑战这个设计决策,但首先想听听大家的意见。我知道EMF项目团队建议在代码中进行更改。但你有什么经验吗? EMF如何处理生成代码中的手动更改?您是否曾经失去过手动编写的代码?代码是否曾经变得难以维护?

我从Stephen那里得到了非常有帮助的答案,但还想听听更多意见! - Wizard of Kneup
2个回答

7
但您有什么经验呢?
我实现了两个不同的项目,都涉及到50个以上的模型类,并且在这两种情况下,模型随着项目的生命周期而发展。即有很多模型变化。在这两种情况下,我修改了生成的代码,通常用于实现计算属性、验证和以各种方式定制编辑器。
EMF如何处理生成的代码中的手动更改?
它表现良好。偶尔生成器会因某些模型更改而产生无法编译的代码,但修复通常很简单;例如删除Java类/接口、死引入等。
您曾经遇到过失去手写代码的情况吗?
只有极少数情况。有时候你忘记移除“generated”标记注释,当重新生成模型时,你的方法就会被覆盖。
(我想,如果这是一个重要问题,你可以修改EMF生成器,在合并更改之前始终备份源树)。
我想最让人恼火的事情是必须格式化生成的代码。 不幸的是,Eclipse代码格式化程序非常粗糙,但如果您手动重新格式化, 您的格式更改将在下次重新生成时被覆盖。但这只是令人恼火的…没有什么值得费心去避免的。
代码是否曾经陷入不可维护的状态?
没有。从未发生过。
阅读consta_a的答案让我想起了我总是将生成的EMF类检入版本控制。这是避免在长期内失去手动编辑的最佳方法。
2018年的更新:我所说的两个EMF项目都发生在2008年之前。自那时以来,EMF世界可能已经发生了变化。我一直没有注意。

0
我确认Stephen C的回答:在我们的情况下,我们处理了大约120个类别,这意味着120个接口+120个实现类+无数的编辑类别和再生很顺利(如果我们可以轻松地使生成的类别格式化为我们想要的(^_^))。
提示:如果您担心丢失一些手工编写的代码,最好将代码保存在存储库中。每次进行更改时,您可以轻松地与以前的版本进行比较并查看已更改的内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接