我已阅读关于some的tutorials EMF,我仍然想知道为什么要使用它。
到目前为止,我正在从XSD架构+ JXC或手动生成我的POJO。
据我了解EMF,定义类之间的一些复杂关系(一对多等等)会很有用。但这就是全部吗?使用EMF生成代码不是更复杂吗?它不会添加一些额外的依赖吗?
答案 0 :(得分:17)
一般来说,可以说使用emf在运行时提供了一些好处。
在第一阶段,您会注意到ecore类(和emf运行时)提供了应用程序中POJO可能需要的内容。在很多领域都不需要进一步编码,而在使用普通POJO时需要手动编写代码:
EMF的扩展甚至提供了更多:
你可能会认为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功能。