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