EMF驗(yàn)證方面的文檔很少, 日他娘的微軟拼音,真討厭啊。
因?yàn)楸容^少,所以這里總結(jié)一下。
驗(yàn)證的定義有兩種方式:
1. 生成驗(yàn)證方法框架,代碼自己實(shí)現(xiàn)。參見(jiàn)EMF Overview:
? 添加Annotatio, Source=http://www.eclipse.org/emf/2002/Ecore, 然后添加DetailsEntry:key=constraints, Value=validateXxx
? EDataType,EClass支持,屬性不支持。
2. 定義類似Schema的Facet,自動(dòng)生成對(duì)應(yīng)的驗(yàn)證代碼,用于驗(yàn)證簡(jiǎn)單數(shù)據(jù)類型:
? 添加Annotatio, Source=http:///org/eclipse/emf/ecore/util/ExtendedMetaData, 然后添加DetailsEntry:key=maxLength, Value=2
? 支持的facet參見(jiàn)ExtendedMetaData。
? 僅EDataType支持,屬性不支持。
示例Ecore:

新生成SqlmodelValidator.java, 代碼如下:

可見(jiàn)Table_ValidateC, MyLabel_ValidateA,MyLabel_validateB都自動(dòng)生成,修改里面的if(false)為需要的業(yè)務(wù)判斷邏輯。
validateMyLabel_MaxLength()方法是根據(jù)ExtendedMetaData自動(dòng)生成的,無(wú)需修改。
總結(jié):
1. EMF驗(yàn)證利用了Annotation擴(kuò)展,這種機(jī)制很靈活,但是給用戶帶來(lái)不便。
2. Attribute屬性不能生成驗(yàn)證規(guī)則(eclipse3.2rc3),可以定義為單獨(dú)的EDataType,然后引用之。
3. Constraints+Facet+本身的結(jié)構(gòu)驗(yàn)證可以構(gòu)成很強(qiáng)的驗(yàn)證規(guī)則,并且屬于Model層,數(shù)據(jù)本身即可驗(yàn)證自身。
4. EObjectValidator.DynamicEDataTypeValidator似乎可用于動(dòng)態(tài)驗(yàn)證,有知道用法的朋友給講解一下~
因?yàn)楸容^少,所以這里總結(jié)一下。
驗(yàn)證的定義有兩種方式:
1. 生成驗(yàn)證方法框架,代碼自己實(shí)現(xiàn)。參見(jiàn)EMF Overview:
? 添加Annotatio, Source=http://www.eclipse.org/emf/2002/Ecore, 然后添加DetailsEntry:key=constraints, Value=validateXxx
? EDataType,EClass支持,屬性不支持。
2. 定義類似Schema的Facet,自動(dòng)生成對(duì)應(yīng)的驗(yàn)證代碼,用于驗(yàn)證簡(jiǎn)單數(shù)據(jù)類型:
? 添加Annotatio, Source=http:///org/eclipse/emf/ecore/util/ExtendedMetaData, 然后添加DetailsEntry:key=maxLength, Value=2
? 支持的facet參見(jiàn)ExtendedMetaData。
? 僅EDataType支持,屬性不支持。
示例Ecore:
新生成SqlmodelValidator.java, 代碼如下:
可見(jiàn)Table_ValidateC, MyLabel_ValidateA,MyLabel_validateB都自動(dòng)生成,修改里面的if(false)為需要的業(yè)務(wù)判斷邏輯。
validateMyLabel_MaxLength()方法是根據(jù)ExtendedMetaData自動(dòng)生成的,無(wú)需修改。
總結(jié):
1. EMF驗(yàn)證利用了Annotation擴(kuò)展,這種機(jī)制很靈活,但是給用戶帶來(lái)不便。
2. Attribute屬性不能生成驗(yàn)證規(guī)則(eclipse3.2rc3),可以定義為單獨(dú)的EDataType,然后引用之。
3. Constraints+Facet+本身的結(jié)構(gòu)驗(yàn)證可以構(gòu)成很強(qiáng)的驗(yàn)證規(guī)則,并且屬于Model層,數(shù)據(jù)本身即可驗(yàn)證自身。
4. EObjectValidator.DynamicEDataTypeValidator似乎可用于動(dòng)態(tài)驗(yàn)證,有知道用法的朋友給講解一下~