在我們創(chuàng)建領(lǐng)域模型前,我們有必要了解一下我們的模型用來表達(dá)什么內(nèi)容。 所以我就先解釋一下在這個(gè)系列文章中要實(shí)現(xiàn)應(yīng)用。 假設(shè)Eclipse組織邀請你編寫一個(gè)讓他們管理貢獻(xiàn)者和項(xiàng)目的應(yīng)用程序。
我們需要?jiǎng)?chuàng)建一個(gè)模型來表達(dá)客戶提供的信息。他們有可能如下圖。

讓我們進(jìn)一步的看看這個(gè)模型。
-
Fundation

-
fundation是這個(gè)模型的根,他擁有兩個(gè)列表屬性。
projects:
像EMF,Techonlogy,Platform這樣的頂級(jí)項(xiàng)目。 |
persons:
參加一個(gè)或多個(gè)項(xiàng)目的人。
|
-
Project

-
Eclipse項(xiàng)目擁有很多屬性,比如項(xiàng)目開始和結(jié)束時(shí)間、項(xiàng)目的主頁的url等等。下面列出我們最感興趣的。
subprojects:
一個(gè)項(xiàng)目可以擁有多個(gè)子項(xiàng)目。子項(xiàng)目本身也可以擁有多個(gè)子項(xiàng)目。
|
parent:
項(xiàng)目有一個(gè)父親(除了頂級(jí)項(xiàng)目外)。這就意味著項(xiàng)目和子項(xiàng)目(project-subproject)的關(guān)系是一個(gè)雙向的關(guān)系。
|
projectleads
一個(gè)項(xiàng)目有多個(gè)項(xiàng)目領(lǐng)導(dǎo)人。 |
committers
一個(gè)項(xiàng)目可以擁有多個(gè)貢獻(xiàn)者。
|
-
CommitterShip

-
當(dāng)一個(gè)用戶成為一個(gè)項(xiàng)目的貢獻(xiàn)者(Committer)時(shí),這就建立了一個(gè)committership。他擁有一個(gè)開始時(shí)間和結(jié)束時(shí)間。另外我們還要記錄下下面的屬性。
project:
和committership相關(guān)的項(xiàng)目。項(xiàng)目和committership是一個(gè)雙向的關(guān)系。
|
person:
參加項(xiàng)目的人。
|
-
Person

-
貢獻(xiàn)者或項(xiàng)目領(lǐng)導(dǎo)人的信息。我們關(guān)系的信息如下:
committerships:
用于保存和人相關(guān)的所有的committerships.這說明人和committership是一個(gè)雙向關(guān)系。
|
下面這張類圖給出了關(guān)于上面模型的全貌。

正如你所看到的,我把許多關(guān)系設(shè)成了雙向關(guān)系。 As you noticed I modeled many of the relations as
bidirectional relations.
這個(gè)并不是嚴(yán)格要求所有地方都要這樣,因?yàn)橛械牡胤娇梢酝ㄟ^eComtainer來獲取他的父親。就像project-subproject一樣。
但是包含關(guān)系(containment
relationship)在使用databinding的情況下就不太合適了。因?yàn)閺淖拥礁赣H時(shí)沒有對應(yīng)feature,只能通過調(diào)用eContainer()方法來獲得。
EMF提供了一個(gè)編輯器來創(chuàng)建你的Ecore-Model并把它保存成XMI格式。我們可以用它來創(chuàng)建測試數(shù)據(jù)。下圖就是一個(gè)例子。
