在XWorker构造事物时,它有一个基本的出发点,就是认为事物的意义是通过它和其它事物之间关系体现的。下面列出一些常用的事物之间的关系类型。
在动态模型编程中一个模型的每一个节点都被看成不同的事物,也就是说虽然所有的模型节点它们一起构成了一个整体,但每一个节点仍然是独立的。这样节点之间的父子包含关系就成了模型之间的一种固有关系。
实际上模型节点中的属性也可以看成是模型,可以把它看成只有一个属性的事物,即它是只有一个固定名为值(value)的属性的模型。把属性看成模型这样理论上更完善一些。
父子关系除了模型上固有的父子关系,也可以有注册的父子关系。
如上图大数据这个模型注册为FunctionInstance这个事物模型的子,这样在逻辑上FunctionInstance这个模型就包含了大数据这个模型。
在上图中如果“注册我的子节点”选中,那么可以把当前事物的子事物批量注册为目标事物的子事物。
父子关系实际上是包含关系,即父事物含有子事物。我们知道事物有属性、子事物和行为等,所以属性、子事物和行为都是包含在父事物下的,它都可以通过子事物来表示。
而注册的父子关系是为了扩展的方便,比如XWorker定义了一个名为A的事物,此时你想扩展它的功能,但是A这个事物的所有权是XWorker,你不能直接修改它(因为XWorker会直接修改它,可能会把你的修改覆盖),此时就可以使用注册的父子关系,在逻辑上把它当作目标事物的子。
注册的父子关系常常在类事物上使用,用于扩充一个类。如果把它用在其它场合,也可以自行实现。
事物之前的描述关系是动态模型编程实现面向对象编程的核心方法,它用来说明一个事物是什么。
如果一个事物含有名为名字(name)的属性,那么这个属性的值就是它的固有名。比如<thing name="zhangsan"/>,那么zhangsan就是这个事物的固有名。
由于一个事物模型只能有一个名为name的属性,所以一个事物的固有名只有一个。
一个事物的描述者的固有名是这个事物的事物名,比如<thing name="Person">这个模型作为<thing name="zhagnsan"/>这个模型的描述者,那么就可以说zhangsan是一个Person。
在动态模型编程中一个事物的描述者可以有多个,也可随时变更描述者,所以一个事物的事物名可以有多个,也可以随时变更。
一个事物是什么可以用它的名字来说明,即可以用固有名或事物名来说明。
比如我们问<thing name="zhangsan">这个事物是什么?那么我们可以用它的固有名回答,即它是zhangsan,也可用事物名来回答,即它是一个Person。
用固有名和事物名表示一个事物是什么也是有区别的,用事物名来解释一个事物是什么通常是在说它是描述者的一个实例,比如上面我们一般会说zhangsan是一个Person,虽然可能也会省略的说zhangsan是Person。
如果我们详细的问一个事物是什么时用名字可能就不够了,此时还需要说明它有哪些属性和行为等。
虽然可以从事物本身(数据)上直接说它的属性和行为,但用描述者来说明才是最常用的方法。把事物归类是我们的本能,在编程时还能够节省大量的空间和时间,因为用归类的方法我们不用说明每一个事物,而只要说明一个事物即这些事物的类即可。
动态模型编程认为描述者不需要把目标事物全部描述清楚,即描述者不需要说明目标事物的全部属性和行为,实际上一个描述者也可以什么都不描述,一般情况下一个事物的所有描述者一起才能完全把它描述清楚。
我们说事物事物可以有行为其实是指一个事物可以作为另一个事物的行为。在XWorker中一个事物的第一个事物名为actions的子节点下的模型被当作是它的行为,一个事物的行为也可以继承自其描述者或被继承的事物上。
在XWorker事物之间还有模板、向导和笔记等关系,每一种关系一般代表的了一个功能,你也可以自定义其它关系。
事物之间的关系可以通过注册实现,这些关系一般只在XWorker中生效,因为它们最终会被记录在数据库中,当使用时从数据库中查询。
Copyright © 2007-2019 XWorker.org 版权所有 沪ICP备08000575号