18

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

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

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

4

4 回答 4

18

一般而言,可以说使用 emf 在运行时提供了多种好处。

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

  • 您将获得一个完整的通知系统(不再有 PropertyChange 编码)。它甚至为在您的实例树中进一步发生的更改提供通知(将侦听器附加到 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 的富客户端,这非常好,但如果您在服务器上,则可能会成为问题。

于 2011-05-09T07:59:10.003 回答
14

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

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

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

此外,请查看Acceleo以了解他们从 EMF 模型(用于 Java、PHP 等)的基于模板的生成方法的灵活性。

于 2011-04-02T19:24:41.037 回答
3

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

我已经成功地使用 EMF Query 使用类似 SQL 的语法和使用 OCL 来搜索模型。EMF Validation 是一个很好的框架,用于根据模式中定义的内容来验证您的模型,并且如果它不能在模式中表达,则可以引入您自己的验证逻辑。

于 2011-05-02T20:15:09.533 回答
0

高级 EMF 是模型驱动工程或 MDA 的 MOF 标准的实现。因此,使用 EMF,您可以从生成的 Java 代码中访问,而不是访问 Java 对象,而是访问它们的模型。这不仅仅是 Java 反射功能。

于 2018-08-30T08:29:35.817 回答