动态模型简介

    动态模型编程方法是XWorker中的基本编程方法,下面将介绍一下什么是动态模型编程。

1.类似HTML的编程方法

1.1.动态模型和HTML类似的地方

    动态模型编程和HTML编程时类似的,它们的类似的地方是一个HTML文档是由各种标签和脚本组成的,其中脚本也是一种标签,而一个动态模型也是由标签和脚本组成的。

    可以参看下面的HTML和动态模型的示例。

1.1.1.HTML代码示例
<html>
    <head>HelloWorld</head>
   <body>
        <h1>Hello World</h1>
        <script language="javascript">
            alert("Hello World");
         </script>
   </body>
</html>

    上面是一个简单的HTML代码示例,可以看到它是由各种标签组成的,它也有一个script标签,可以用来写脚本。

1.1.2.动态模型示例
<thing name="HelloWorld">
    <actions>
        <GroovyAction name="run" code="println(&quot;Hello World&quot;);"></GroovyAction>
    </actions>
</thing>

    上面是一个动态模型的模型代码,可以看到它也是有各种标签组成的,其中actions标签下的字标签也是脚本,如GroovyAction就是Groovy语言的脚本标签,可以在code属性中编写Groovy的脚本。

1.2.和HTML不同的地方

1.2.1.动态模型的标签基本是完全自定义的

    和HTML编程不同的是动态模型编程中的标签基本是完全自定义的,在动态模型编程中只存在一个预置标签,而其它标签全部都是在后期用户自定义添加的。

<thing name="thing" descriptors="MetaThing">
    <attribute name="name"/>
    <attribute name="descriptors"/>
    <attribute name="extends"/>
    <thing name="attribute">
        <attribute name="name"/>
    </thing>
    <thing name="thing" extends="_root"/>
    <thing name="actions">
        <thing name="JavaAction">
            <attribute name="name"/>
            <attribute name="useOuterJava"/>
            <attribute name="outerClassName"/>
            <attribute name="methodName"/>
            <attribute name="className"/>
             <attribute name="code"/>
            <attribute name="isSynchronized"/>
            <attribute name="useOtherAction"/>
            <attribute name="otherActionPath""/>
    </thing>
</thing>

    上面的模型代码是XWorker所使用的模型引擎中预置基的础模型标签,除此之外其它模型标签都是用户自定义添加的。

1.2.2.标签的语义也是自定义的

    和HTML编程不同动态模型的标签的语义也是用户自定义的,并且是可以随时改变的。

1.2.3.模型是动态的

    综合1.2.1和1.2.2.可知动态模型编程中标签和标签的语义也是动态的,实际上动态模型编程是一种比HTML编程还更加动态和灵活的编程方法。

2.动态模型编程基本知识

2.1.动态模型以模型为基本元素

    动态模型的每一个标签都是一个模型,它用模型来表示各种东西。在动态模型中模型是由属性和节点组成的树形结构的数据,结构和XML类似,可以简单的理解为XML。

2.2.动态模型实现了面向对象的方法

    动态模型实现了面向对象的方法,在实际使用中我们可以用面向对象的方法来使用模型。

2.2.1.用模型表示对象

    首先模型是由属性和子节点构成的,所以我们可以用它表示对象的属性,其次模型在动态模型中也是可以执行的,因此可以把一个模型的某些子节点当作它的行为,这样我们就用模型表示了对象的属性和行为,所以用模型可以表示对象。

2.2.2.用模型表示类

    在面向对象中不能少了类的概念,现在有了对象,那么对象的类怎么表示呢?其实可以用它自己或其它模型来作为它的类。

    在这里我们不得不说下面传统的向对象编理论中的缺点,就是它把类和对象当成了两个独立的概念。如果你也是这么想的,那你可以想一想Java中的反射机制,如果运行时类不是以对象的形式存在的,你能获得类的属性和方法的定义么?而这也给了我们一个启示,即什么时候我们把一个对象当作类,而什么时候又把它当作一个对象的,答案就是在你需要的时候。

    所以在动态模型中我们可以把一个模型当作一个模型的类,比如用A模型来描述B模型,此时A就是B的类,在动态模型编程中称A是B的描述者

2.2.3.继承的实现

    有了类和对象的概念,我们也可以实现面向对象中的继承。由于在动态模型中类和对象都是模型,而模型是数据,所以像关系数据库一样,类和对象是模型间的一种逻辑关系,同时类和类之间的继承也是模型之间的一种逻辑关系。

    在动态模型编程中我们定义一个模型可以继承另一个不同的模型,从而继承被继承模型的行为,而如果一个模型作为另一个模型的描述者(即类),比如A是B的描述者,那么B也拥有A的行为。

3.动态模型的特点

    动态模型实际上是一个动态对象的方法,即类和对象的关系是可以随时变化的,这样可以随时添加和修改对象以及对象的类别,从而实现了系统的动态性。

    由于动态模型的核心是变化,所以这也决定了它是一个运行时的编程方法,我们可以在运行时为系统增加新的对象和类,也可以随时修改已有的对象和类,这样系统的功能就能够在运行时随时改变,从而系统是一个可以通过修改自己而不断完善的动态系统了。

4.虚拟世界

    用虚拟世界做类比可以更好的理解动态模型编程的功能。实现了动态模型编程的系统好比一个虚拟世界,这个系统中有各种各样的事物(对象),而且还可以随时加入新的对象和类等,而这在理论上并不需要对系统的底层重新编码也不需要重启系统,这样的系统是动态可变的。

Copyright ©  2007-2019 XWorker.org  版权所有  沪ICP备08000575号