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

steeven 2006-05-19 19:03
|