EMF中的三個(gè)部分:元數(shù)據(jù)meta-data,代碼生成code generation,默認(rèn)序列化default serialization.
EMF is part of the Model Driver Architecture(MDA).MDA是將整個(gè)應(yīng)用軟件生存周期的開(kāi)發(fā)管理都集中于模型上。這種模型是用元模型(meta-model)定義的。然后,使用映射,模型被用于生成software artefacts, 這就實(shí)現(xiàn)了整個(gè)系統(tǒng)。
EMF所能做的:emf能夠用于描述和構(gòu)建模型。所實(shí)現(xiàn)的模型可以被用于任何java應(yīng)用程序的開(kāi)發(fā)。
對(duì)于ecore模型我們有幾點(diǎn)需要注意:
1。在ecore文件的xmi描述中沒(méi)有各個(gè)元素之間的聯(lián)系,我們使用EReference來(lái)表示各個(gè)元素之間的聯(lián)系。
對(duì)于兩個(gè)方向上的聯(lián)系,通過(guò)兩個(gè)成對(duì)的EReference來(lái)表示,每個(gè)聯(lián)系的類,都有一個(gè)eOpposite來(lái)保存它自己在所聯(lián)系類中的名字(引用)。
對(duì)于單方向上的聯(lián)系,使用一個(gè)單獨(dú)的EReference,并且這個(gè)reference沒(méi)有eOpposite(因?yàn)閷?duì)方并沒(méi)有對(duì)自己的引用)。
連接的多重性通過(guò)upperBound和lowerBound來(lái)表示。多個(gè)用-1。
2。使用EPackage可以像java中的package一樣用。
3。兩種模型,一種是業(yè)務(wù)模型,一種是視圖模型。一般將兩種模型放在不同的package中。兩種方法將兩種模型聯(lián)系起來(lái):
一是構(gòu)建一個(gè)新package,構(gòu)建一個(gè)多重繼承的新package來(lái)將兩個(gè)package聯(lián)系起來(lái)。
二是將兩種模型分開(kāi)存儲(chǔ),添加從視圖模型到業(yè)務(wù)模型的引用。這種方法兩個(gè)模型是松耦合的。這種單方向的引用也不會(huì)破壞(污染)業(yè)務(wù)模型。注意,由于這種引用是兩個(gè)package之間的,所以在移用的eType類型中需要指明包名。
除此之外,ecore還提供了一種遞歸的定義方法。就是使用eSubPackage來(lái)分別包含業(yè)務(wù)模型和視圖模型,并且在這兩個(gè)subPackage間建立reference(對(duì)于package來(lái)說(shuō)是自己引用自己)。
4。我們可以有多種方法來(lái)生成ecore模型。通過(guò)注釋的java接口(annotated java interface),通過(guò)rantional rose創(chuàng)建模型,通過(guò)XML Schema等等。