我为什么要使用EMF?

Pie*_*rre 17 java xsd eclipse-emf

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

到目前为止,我正在从XSD架构+ JXC生成我的POJO ,或者手动生成.

据我所知,EMF定义类之间的一些复杂关系(一对多等等)会很有用.但这就是全部吗?使用EMF生成代码不是更复杂吗?它不会添加一些额外的依赖吗?

adi*_*eim 18

一般来说,可以说使用emf在运行时提供了一些好处.

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

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

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

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

你可以说EMF/Ecore为POJO提供了一个标准,并且整个生态系统在它周围成长,实际上提供了你用经典方法手工编写的代码.

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

  • 应该注意的是,EMF可以单独使用,即使在不在Equinox中运行的纯OSGi应用程序中也是如此.你只需要3个包:org.eclipse.emf.ecore,org.eclipse.emf.ecore.xmi和org.eclipse.emf.common (2认同)

Jor*_*bot 14

如果您唯一的兴趣是生成POJO,那么我同意有很多替代方案可以实现与EMF相同的操作.

但是,Java生成只是EMF的第一个应用程序.现在有大量基于EMF的Eclipse插件,可以免费为操作(查询,验证,转换......)EMF模型提供许多功能.

有关EMF的官方Eclipse项目列表,请参阅Eclipse Modeling Project.

另外,请看一下Acceleo,看看EMF模型(适用于Java,PHP,...)的基于模板的生成方法的灵活性.