在我們創(chuàng)建領域模型前,我們有必要了解一下我們的模型用來表達什么內(nèi)容。 所以我就先解釋一下在這個系列文章中要實現(xiàn)應用。 假設Eclipse組織邀請你編寫一個讓他們管理貢獻者和項目的應用程序。
我們需要創(chuàng)建一個模型來表達客戶提供的信息。他們有可能如下圖。
讓我們進一步的看看這個模型。
- Fundation
-
fundation是這個模型的根,他擁有兩個列表屬性。
projects: 像EMF,Techonlogy,Platform這樣的頂級項目。 persons: 參加一個或多個項目的人。 - Project
-
Eclipse項目擁有很多屬性,比如項目開始和結(jié)束時間、項目的主頁的url等等。下面列出我們最感興趣的。
subprojects: 一個項目可以擁有多個子項目。子項目本身也可以擁有多個子項目。 parent: 項目有一個父親(除了頂級項目外)。這就意味著項目和子項目(project-subproject)的關(guān)系是一個雙向的關(guān)系。 projectleads 一個項目有多個項目領導人。 committers 一個項目可以擁有多個貢獻者。 - CommitterShip
-
當一個用戶成為一個項目的貢獻者(Committer)時,這就建立了一個committership。他擁有一個開始時間和結(jié)束時間。另外我們還要記錄下下面的屬性。
project: 和committership相關(guān)的項目。項目和committership是一個雙向的關(guān)系。 person: 參加項目的人。 - Person
-
貢獻者或項目領導人的信息。我們關(guān)系的信息如下:
committerships: 用于保存和人相關(guān)的所有的committerships.這說明人和committership是一個雙向關(guān)系。
下面這張類圖給出了關(guān)于上面模型的全貌。
正如你所看到的,我把許多關(guān)系設成了雙向關(guān)系。 As you noticed I modeled many of the relations as bidirectional relations. 這個并不是嚴格要求所有地方都要這樣,因為有的地方可以通過eComtainer來獲取他的父親。就像project-subproject一樣。 但是包含關(guān)系(containment relationship)在使用databinding的情況下就不太合適了。因為從子到父親時沒有對應feature,只能通過調(diào)用eContainer()方法來獲得。 EMF提供了一個編輯器來創(chuàng)建你的Ecore-Model并把它保存成XMI格式。我們可以用它來創(chuàng)建測試數(shù)據(jù)。下圖就是一個例子。