为什么要使用电磁场?

2022-09-02 20:25:37

我已经阅读了一些关于EMF的教程,我仍然想知道为什么我应该使用它。

到目前为止,我一直在从 XSD 模式 + JXC 或手动生成我的 POJO。

据我所知,EMF定义类之间的一些复杂关系(一对多等)是很有用的。但仅此而已吗?使用EMF生成代码不是更复杂吗?它不是添加了一些额外的依赖关系吗?


答案 1

一般来说,可以说使用emf在运行时提供了几个好处。

在第一阶段,您会注意到 ecore 类(和 emf 运行时)提供了应用程序中 POJO 可能需要的内容。在很多领域不需要进一步的编码,而在使用普通POJO时,您需要手动编码:

  • 你会得到一个完整的通知系统(不再有属性更改编码)。它甚至为实例树中进一步发生的更改提供通知(将侦听器附加到x,获得x引用的y中更改的通知)。
  • 值是不可设置的(实际上是一个非常普遍的需求:你需要知道一个值的3个状态:它被设置,它被设置为null或它没有被触及)。
  • 双向参照:X 参照 Y,反之亦然。删除 X 中对 Y 的引用,也删除相反的引用。
  • XML、XMI(等)序列化支持开箱即用。
  • 延迟加载:您可以对模型进行分区,并仅让某些部分延迟加载。
  • 等。

对EMF的扩展甚至提供了更多:

  • EMF 查询或 EMF 路径添加了高级查询功能,以收集给定条件的 pojo 实例
  • CDO 允许您对 3 层应用程序进行编码,而无需进一步手动编码。CDO 增加了数据库持久性和远程通知(会话、事务、版本控制、分支等)
  • Xtext 将序列化添加到自定义 DSL(定义您自己的序列化格式/方言)
  • 等。

实际上,你可以争辩说,EMF /Ecore为POJO提供了一个标准,并且围绕它发展了整个生态系统,实际上提供了你用经典方法手动编码的东西。

说实话,EMF的缺点是你被绑定到Ecore运行时,如果你编写基于Eclipse的富客户端,这是非常好的,但如果你在服务器上,可能会成为一个问题。


答案 2

如果你唯一的兴趣是POJO的产生,那么我同意有很多替代方案可以实现与EMF相同的方法。

然而,Java生成只是EMF的第一个应用。现在有大量基于EMF的Eclipse插件,它们免费为您提供了许多功能来操作(查询,验证,转换,...)您的EMF模型。

有关 EMF 的官方 Eclipse 项目列表,请参阅 Eclipse 建模项目。

另外,看看Acceeo,看看他们基于模板的EMF模型生成方法的灵活性(适用于Java,PHP,...)。


推荐