在我們創建領域模型前,我們有必要了解一下我們的模型用來表達什么內容。 所以我就先解釋一下在這個系列文章中要實現應用。 假設Eclipse組織邀請你編寫一個讓他們管理貢獻者和項目的應用程序。
我們需要創建一個模型來表達客戶提供的信息。他們有可能如下圖。

讓我們進一步的看看這個模型。
-
Fundation

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

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

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

-
貢獻者或項目領導人的信息。我們關系的信息如下:
committerships:
用于保存和人相關的所有的committerships.這說明人和committership是一個雙向關系。
|
下面這張類圖給出了關于上面模型的全貌。

正如你所看到的,我把許多關系設成了雙向關系。 As you noticed I modeled many of the relations as
bidirectional relations.
這個并不是嚴格要求所有地方都要這樣,因為有的地方可以通過eComtainer來獲取他的父親。就像project-subproject一樣。
但是包含關系(containment
relationship)在使用databinding的情況下就不太合適了。因為從子到父親時沒有對應feature,只能通過調用eContainer()方法來獲得。
EMF提供了一個編輯器來創建你的Ecore-Model并把它保存成XMI格式。我們可以用它來創建測試數據。下圖就是一個例子。
