【发布时间】:2024-05-04 14:55:03
【问题描述】:
我已经阅读了 some tutorials 关于 EMF 的文章,但我仍然想知道为什么要使用它。
到目前为止,我都是从 XSD 架构 + JXC 或手动生成我的 POJO。
据我了解 EMF,定义类之间的一些复杂关系(一对多等)可能很有用。但仅此而已吗?用 EMF 生成代码不是更复杂吗?不是增加了一些额外的依赖吗?
【问题讨论】:
标签: java xsd eclipse-emf
我已经阅读了 some tutorials 关于 EMF 的文章,但我仍然想知道为什么要使用它。
到目前为止,我都是从 XSD 架构 + JXC 或手动生成我的 POJO。
据我了解 EMF,定义类之间的一些复杂关系(一对多等)可能很有用。但仅此而已吗?用 EMF 生成代码不是更复杂吗?不是增加了一些额外的依赖吗?
【问题讨论】:
标签: java xsd eclipse-emf
高级 EMF 是模型驱动工程或 MDA 的 MOF 标准的实现。因此,使用 EMF,您可以从生成的 Java 代码中访问,而不是访问 Java 对象,而是访问它们的模型。如果不仅仅是 Java 反射功能的话。
【讨论】:
一般来说,可以说使用 emf 在运行时提供了多种好处。
在第一阶段,您会注意到 ecore 类(和 emf 运行时)提供了您在应用程序中的 POJO 中可能需要的东西。在很多领域都不需要进一步编码,而在使用普通 POJO 时您需要手动编写很多代码:
EMF 的扩展甚至提供了更多功能:
您实际上可以争辩说,EMF/Ecore 为 POJO 提供了一个标准,并且围绕它发展了一个完整的生态系统,实际上提供了您可以以经典方法手动编码的内容。
说实话,EMF 的缺点是你会依赖于 Ecore 运行时,如果你编写基于 Eclipse 的富客户端,这非常好,但如果你在服务器上可能会成为一个问题。
【讨论】:
除了 Jordi 所说的之外,EMF 提供了通知机制,它与 XML Beans 不同,例如,允许您添加侦听器以进行模型更改。因此,当模型发生更改时,您会收到有关此更改的通知。
我已经成功地使用 EMF Query 使用类似 SQL 的语法和使用 OCL 来搜索模型。 EMF Validation 是一个很好的框架,它可以根据模式中定义的内容来验证您的模型,并且如果它不能在模式中表达,则可以引入您自己的验证逻辑。
【讨论】:
如果您唯一的兴趣是 POJO 的生成,那么我同意有许多替代方案可以实现与 EMF 相同的效果。
然而,Java 生成只是 EMF 的第一个应用。现在有大量基于 EMF 的 Eclipse 插件可以免费为您提供很多功能来操作(查询、验证、转换......)您的 EMF 模型。
有关 EMF 上的官方 Eclipse 项目列表,请参阅 Eclipse Modeling Project。
此外,请查看Acceleo,了解他们从 EMF 模型(用于 Java、PHP 等)中基于模板的生成方法的灵活性。
【讨论】: