EMF Validation Framework提供了对EMF eObjects的校验框架。这种校验框架支持两个层面的:第一个层面可以对一个集合内的eObjects进行校验,第二个层面可以时时地对对象内的属性(值)变更进行校验。
EMF Validation Framework提供了对EMF eObjects的校验框架。这种校验框架支持两个层面的:第一个层面可以对一个集合内的eObjects进行校验,第二个层面可以时时地对对象内的属性(值)变更进行校验。
这几天利用有限的空余时间在钻研EMF Validation Framework。原以为Validation会比较简单(使用Validation倒是比较简单),其实却不然。为了弄清楚Validation内部实现类及构架机制,着实耗费了不少时间。
EMF的Validation Framework使用是很比较简单的,最简单的方式可以通过扩展org.eclipse.emf.validation.constraintProviders扩展点,通过构造特定的AbstractModelConstraint实现类来对eObjects进行校验。但EMF Validation Framework的结构是非常复杂的,这也是由于Validation试图提供更加复杂全面的检验框架:
(1) 提供对Batch Validator和Live Validator的支持
(2) 提供对多种声明Constraint的方式支持,目前支持Java类的方式,就是前面提到的通过实现用户自己的AbstractModelConstraint类;支持EMF Constraint和灵活的OCL Constraint方式。
(3) 提供了较为简单的Validation Adaptor方式进行校验
(4) 试图提供一个Validation Client Context来规避不必要的Constraint
(5) 提供了便于管理和维护的Validation Service类
在eclipse所提供的帮助站点上,提供了对Validation Framework的简要介绍,以及简单的Examples。
但是这个tutorial并没有对EMF Validation进行太深入地介绍,仅仅只是介绍了比较浅显的“How to use it”,而没有深入的介绍Validation的构架、对象逻辑等等。
为了便于理解EMF Validation,将主要的Component Diagram绘制如下。这个组件图要抽象了很多,其实里面的组件有些是相当的复杂的。比如Constraint Parser和Model Constraint。
时间不早了,有关组件的详细解释先不写了,留着下篇吧。不过这个组件图应该可以帮助大家在阅读Validation代码的时候起到一定辅助作用。