我从事 EMF 项目。设计决策之一是不接触生成的代码,也不将其签入。相反,每当需要更改某些内容时,都会创建一个包含更改的子类。该框架足够灵活来处理这个问题。但是,我遇到了一些工作开销。
设计决定是基于其他代码生成框架的不良经验被重新生成让问题。
作为该项目的新手,我想挑战这个设计决定,但想先听听一般意见。我知道 EMF 项目团队建议进行代码内更改。但是你的经验是什么?EMF 在生成的代码中处理手动代码更改的能力如何?您是否曾经到过丢失手动编写代码的地步?代码是否曾经进入不可维护状态?
我从事 EMF 项目。设计决策之一是不接触生成的代码,也不将其签入。相反,每当需要更改某些内容时,都会创建一个包含更改的子类。该框架足够灵活来处理这个问题。但是,我遇到了一些工作开销。
设计决定是基于其他代码生成框架的不良经验被重新生成让问题。
作为该项目的新手,我想挑战这个设计决定,但想先听听一般意见。我知道 EMF 项目团队建议进行代码内更改。但是你的经验是什么?EMF 在生成的代码中处理手动代码更改的能力如何?您是否曾经到过丢失手动编写代码的地步?代码是否曾经进入不可维护状态?
但是你的经验是什么?
我已经实现了两个独立的项目,这两个项目都涉及具有 50 个或更多模型类的模型,并且在这两种情况下,模型都在项目的整个生命周期中不断发展;即大量的模型变化。在这两种情况下,我将生成的代码修改为通常用于实现计算属性、验证和以各种方式自定义编辑器。
EMF 在生成的代码中处理手动代码更改的能力如何?
它运作良好。有时,生成器生成的代码由于某些模型更改而无法编译,但修复通常很简单;例如删除 Java 类/接口、死导入等。
您是否曾经到过丢失手动编写代码的地步?
只是非常偶尔。有时您会忘记删除“生成的”标记注释,并且当您重新生成模型时,您的方法会被破坏。
(我想如果这是一个主要问题,您可以修改 EMF 生成器以在合并更改之前始终备份源树。)
我想最烦人的是生成的代码必须被格式化。不幸的是,Eclipse 代码格式化程序相当粗鲁,但是如果您手动重新格式化,您的格式化更改会在您下次重新生成时被破坏。但这只是令人恼火......不是值得跳过箍来避免的事情。
代码是否曾经进入不可维护状态?
没有。永远不会。
阅读 consta_a 的答案提醒我,我总是将生成的 EMF 类检查到版本控制中。从长远来看,这是避免丢失手动编辑的最佳方法。
2018 年更新:我所说的 2 个 EMF 项目发生在 2008 年之前。从那时起,EMF 世界的情况可能发生了变化。我一直没有跟踪。
我确认 Stephen C 的回答:在我们的例子中,我们在模型中处理大约 120 个类,这意味着 120 个接口 + 120 个实现类 + 无数的编辑类,并且重新生成非常顺利(如果我们可以轻松地将生成的类按照我们想要的格式设置( ^_^))
提示:如果您担心丢失一些手工制作的代码,最好将您的代码保存在存储库中。每次进行更改时,您都可以轻松地与以前的版本进行比较,看看有什么变化。