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

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

可見Table_ValidateC, MyLabel_ValidateA,MyLabel_validateB都自動生成,修改里面的if(false)為需要的業務判斷邏輯。
validateMyLabel_MaxLength()方法是根據ExtendedMetaData自動生成的,無需修改。
總結:
1. EMF驗證利用了Annotation擴展,這種機制很靈活,但是給用戶帶來不便。
2. Attribute屬性不能生成驗證規則(eclipse3.2rc3),可以定義為單獨的EDataType,然后引用之。
3. Constraints+Facet+本身的結構驗證可以構成很強的驗證規則,并且屬于Model層,數據本身即可驗證自身。
4. EObjectValidator.DynamicEDataTypeValidator似乎可用于動態驗證,有知道用法的朋友給講解一下~