EMF中的三个部分:元数据meta-data,代码生成code generation,默认序列化default serialization.
EMF is part of the Model Driver Architecture(MDA).MDA是将整个应用软件生存周期的开发管理都集中于模型上。这种模型是用元模型(meta-model)定义的。然后,使用映射,模型被用于生成software artefacts, 这就实现了整个系统。
EMF所能做的:emf能够用于描述和构建模型。所实现的模型可以被用于任何java应用程序的开发。
对于ecore模型我们有几点需要注意:
1。在ecore文件的xmi描述中没有各个元素之间的联系,我们使用EReference来表示各个元素之间的联系。
对于两个方向上的联系,通过两个成对的EReference来表示,每个联系的类,都有一个eOpposite来保存它自己在所联系类中的名字(引用)。
对于单方向上的联系,使用一个单独的EReference,并且这个reference没有eOpposite(因为对方并没有对自己的引用)。
连接的多重性通过upperBound和lowerBound来表示。多个用-1。
2。使用EPackage可以像java中的package一样用。
3。两种模型,一种是业务模型,一种是视图模型。一般将两种模型放在不同的package中。两种方法将两种模型联系起来:
一是构建一个新package,构建一个多重继承的新package来将两个package联系起来。
二是将两种模型分开存储,添加从视图模型到业务模型的引用。这种方法两个模型是松耦合的。这种单方向的引用也不会破坏(污染)业务模型。注意,由于这种引用是两个package之间的,所以在移用的eType类型中需要指明包名。
除此之外,ecore还提供了一种递归的定义方法。就是使用eSubPackage来分别包含业务模型和视图模型,并且在这两个subPackage间建立reference(对于package来说是自己引用自己)。
4。我们可以有多种方法来生成ecore模型。通过注释的java接口(annotated java interface),通过rantional rose创建模型,通过XML Schema等等。