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似乎可用于动态验证,有知道用法的朋友给讲解一下~