EMF建模常見(jiàn)問(wèn)題
Posted on 2007-05-07 14:10 xiaoxiaoleemin 閱讀(1003) 評(píng)論(1) 編輯 收藏 所屬分類(lèi): EMF 我習(xí)慣于直接用ECore Editor建立ecore模型,如果裝了GMF插件的話,在ecore文件上點(diǎn)擊鼠標(biāo)右鍵,通過(guò)菜單“Initialize ecore-diagram diagram file”可以生成類(lèi)似類(lèi)圖的表示,這樣可以從整體上看模型。而且在建模的過(guò)程中可以隨時(shí)"Validate"以檢查當(dāng)前存在的錯(cuò)誤。以下是一些常見(jiàn)的問(wèn)題:
1.Ecore Editor中根元素的直接子元素屬性頁(yè)中有“Ns Prefix"和"Ns URI"兩項(xiàng)需要設(shè)置,前者可以設(shè)置為模型的名字,后者隨便設(shè)置一個(gè)URI地址,如"http://"+模型名字。如果這兩項(xiàng)不設(shè)置,那么當(dāng)修改了ecore模型后,從genmodel上“Reload" ecore模型時(shí)出錯(cuò)。
2.某個(gè)EReference如果多重性為"0...*",則在屬性頁(yè)中把lower bound設(shè)置為0,upper bound設(shè)置為-1。
3.genmodel根元素的第一層子元素的屬性頁(yè)中,"All"類(lèi)別中“prefix”屬性值是指EMF生成的代碼中Factory和Package等類(lèi)的前綴,可以指定為模型名字,首字母大寫(xiě)以符合類(lèi)名的習(xí)慣;“base package”屬性值是生成的各個(gè)包的前綴,假設(shè)指定為“com.example"。然后有“Ecore”類(lèi)別,其中的各個(gè)屬性值是從ecore模型中讀過(guò)來(lái)的,不可修改,其中“Package”類(lèi)別下的"Name"屬性值是包名的一部分(假設(shè)指定為model),接在前面的base package值之后,那么生成的Model 部分代碼分別有三個(gè)包:com.example.model; com.example.model.impl; com.example.model.util.
btw:在有的GMF 版本中,如果包名存在首字母大寫(xiě)的單詞,那么生成代碼的時(shí)候會(huì)出錯(cuò)。
1.Ecore Editor中根元素的直接子元素屬性頁(yè)中有“Ns Prefix"和"Ns URI"兩項(xiàng)需要設(shè)置,前者可以設(shè)置為模型的名字,后者隨便設(shè)置一個(gè)URI地址,如"http://"+模型名字。如果這兩項(xiàng)不設(shè)置,那么當(dāng)修改了ecore模型后,從genmodel上“Reload" ecore模型時(shí)出錯(cuò)。
2.某個(gè)EReference如果多重性為"0...*",則在屬性頁(yè)中把lower bound設(shè)置為0,upper bound設(shè)置為-1。
3.genmodel根元素的第一層子元素的屬性頁(yè)中,"All"類(lèi)別中“prefix”屬性值是指EMF生成的代碼中Factory和Package等類(lèi)的前綴,可以指定為模型名字,首字母大寫(xiě)以符合類(lèi)名的習(xí)慣;“base package”屬性值是生成的各個(gè)包的前綴,假設(shè)指定為“com.example"。然后有“Ecore”類(lèi)別,其中的各個(gè)屬性值是從ecore模型中讀過(guò)來(lái)的,不可修改,其中“Package”類(lèi)別下的"Name"屬性值是包名的一部分(假設(shè)指定為model),接在前面的base package值之后,那么生成的Model 部分代碼分別有三個(gè)包:com.example.model; com.example.model.impl; com.example.model.util.
btw:在有的GMF 版本中,如果包名存在首字母大寫(xiě)的單詞,那么生成代碼的時(shí)候會(huì)出錯(cuò)。