ECO的“Handle” 和 “Handle链”
所有的ECO框架程序都必需有一个EcoSpace的对象实例,EcoSpace利用.net的反射机制和设计期的ECO模型定义控制着运行时创建或由ECO环境返回的ECO对象实例。
Handle(句柄)可以表达一个对象实例,一组对象实例或者是计算结果。Handle对象模型与结构可以在BDS的安装目录下的ECO源程序目录中找到定义。ECO的设计师想用它来做为EcoSpace与其它Component(组件)之间的连接器,提供对象数据或数值。
句柄Handle的定义如下图,Root Handle用于连接上一级RootHandle,向下级Handle提供ECO数据。RootHandle和RootedHandle都可以用于级联,但是RootedHandle比RootHandle多了个Expression的属性,也就是说它多了可以执行OCL查询的功能。
所有的ECO窗体,包括ECO winform和ECO webform都必需创建一个ReferenceHandle,也就是我们看到的“rhRoot”。
VariableHandle指的是所有不存在EcoSpace中而又想加入到Ecospace运算的东西,比如一些自定义的参数。设计它通过包含
OclVariable来提供一些原子属性,如Int32,相当进行了一次装箱(boxing),同样,VariableHandle也可以与界面数据控件绑定,而OclVariables只是用来提供Ocl所需的自定义值参数。
ExpressionHandle与OclPSHandle都是RootedHandle,于是就都包含了expression。ExpressionHandle包含的 OCL语句所能表达的操作对象局限在它的上级RootHandle或RootedHandle的StaticValueTypeName属性,如果它最终的上级RootHandle设定StaticValueTypeName为程序中的ECO类的其中一个的话,那该expressionhandle只能做这个ECO类的文章了。
OclPSHandle的设计目的是在OCL语言的操作上实现与持久化无关的内容,它有Execute函数,它产生的OCL操作结果只是一个静态的持久化类的快照(修改了没有用的)。