我为什么要使用EMF?

时间:2011-04-01 17:43:55

标签: java xsd eclipse-emf

我已阅读关于sometutorials EMF,我仍然想知道为什么要使用它。

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

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

4 个答案:

答案 0 :(得分:17)

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

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

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

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

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

你可能会认为EMF / Ecore为POJO提供了一个标准,整个生态系统围绕着它生长,实际上提供了你用经典方法手工编写的代码。

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

答案 1 :(得分:13)

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

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

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

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

答案 2 :(得分:3)

添加到Jordi所说的EMF提供的通知机制,例如,与XML Bean不同,允许您为模型更改添加侦听器。因此,当模型中发生更改时,您会收到有关此更改的通知。

我已成功使用EMF Query使用类似SQL的语法搜索模型,并使用OCL。 EMF验证是一个很好的框架,用于根据模式中定义的内容验证模型,并在模式中无法表达时引入自己的验证逻辑。

答案 3 :(得分:0)

高级EMF是MOF标准的实现,用于模型驱动工程或MDA。因此,使用EMF,您不仅可以访问生成的Java代码,还可以访问Java对象,还可以访问其模型。哪怕不仅仅是Java Reflection功能。