我为什么要使用EMF?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我为什么要使用EMF?相关的知识,希望对你有一定的参考价值。

我读过有关sometutorials EMF,我仍然想知道为什么要使用它。

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

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

答案

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

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

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

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

另一答案

一般来说,可以说使用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的缺点是,如果您编写基于Eclipse的富客户端,那么您可以与Ecore运行时绑定,但如果您在服务器上,则可能会成为问题。

另一答案

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

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

另一答案

在高级EMF是MOF标准的实现,用于模型驱动的工程或MDA。因此,使用EMF,您可以从生成的Java代码访问Java对象,但也可以访问他们的模型。这不仅仅是Java Reflection的功能。

以上是关于我为什么要使用EMF?的主要内容,如果未能解决你的问题,请参考以下文章

将 EMF 转换为 PNG,结果并不完美

如何将emf文件转换成png格式

求java将emf图片转换为jpg格式的插件,org.freehep.graphicsio.emf.EMFInputStream; import org.freehep.

Matlab,用奇怪的输出保存.EMF图片

WPF 是不是支持本机读取/写入 WMF/EMF 文件?

如何使用 EMF 读取 XML 文件?