我读过有关some的tutorials 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时需要手动编写代码:
EMF的扩展甚至提供了更多:
你可以说EMF / Ecore为POJO提供了一个标准,并且整个生态系统在它周围成长,实际上提供了你用经典方法手工编写的代码。
老实说,EMF的缺点是,如果您编写基于Eclipse的富客户端,那么您可以与Ecore运行时绑定,但如果您在服务器上,则可能会成为问题。
添加到Jordi所说的EMF提供的通知机制,例如,与XML Bean不同,允许您向模型更改添加侦听器。因此,当模型中发生更改时,您会收到有关此更改的通知。
我已成功使用EMF查询使用类似SQL的语法搜索模型,并使用OCL。 EMF验证是一个很好的框架,用于根据模式中定义的内容验证模型,如果无法在模式中表示,则引入自己的验证逻辑。
在高级EMF是MOF标准的实现,用于模型驱动的工程或MDA。因此,使用EMF,您可以从生成的Java代码访问Java对象,但也可以访问他们的模型。这不仅仅是Java Reflection的功能。