动态模型编程方法是XWorker中的基本编程方法,下面将介绍一下什么是动态模型编程。
动态模型编程和HTML编程时类似的,它们的类似的地方是一个HTML文档是由各种标签和脚本组成的,其中脚本也是一种标签,而一个动态模型也是由标签和脚本组成的。
可以参看下面的HTML和动态模型的示例。
<html> <head>HelloWorld</head> <body> <h1>Hello World</h1> <script language="javascript"> alert("Hello World"); </script> </body> </html>
上面是一个简单的HTML代码示例,可以看到它是由各种标签组成的,它也有一个script标签,可以用来写脚本。
<thing name="HelloWorld"> <actions> <GroovyAction name="run" code="println("Hello World");"></GroovyAction> </actions> </thing>
上面是一个动态模型的模型代码,可以看到它也是有各种标签组成的,其中actions标签下的字标签也是脚本,如GroovyAction就是Groovy语言的脚本标签,可以在code属性中编写Groovy的脚本。
和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所使用的模型引擎中预置基的础模型标签,除此之外其它模型标签都是用户自定义添加的。
和HTML编程不同动态模型的标签的语义也是用户自定义的,并且是可以随时改变的。
综合1.2.1和1.2.2.可知动态模型编程中标签和标签的语义也是动态的,实际上动态模型编程是一种比HTML编程还更加动态和灵活的编程方法。
动态模型的每一个标签都是一个模型,它用模型来表示各种东西。在动态模型中模型是由属性和节点组成的树形结构的数据,结构和XML类似,可以简单的理解为XML。
动态模型实现了面向对象的方法,在实际使用中我们可以用面向对象的方法来使用模型。
首先模型是由属性和子节点构成的,所以我们可以用它表示对象的属性,其次模型在动态模型中也是可以执行的,因此可以把一个模型的某些子节点当作它的行为,这样我们就用模型表示了对象的属性和行为,所以用模型可以表示对象。
在面向对象中不能少了类的概念,现在有了对象,那么对象的类怎么表示呢?其实可以用它自己或其它模型来作为它的类。
在这里我们不得不说下面传统的向对象编理论中的缺点,就是它把类和对象当成了两个独立的概念。如果你也是这么想的,那你可以想一想Java中的反射机制,如果运行时类不是以对象的形式存在的,你能获得类的属性和方法的定义么?而这也给了我们一个启示,即什么时候我们把一个对象当作类,而什么时候又把它当作一个对象的,答案就是在你需要的时候。
所以在动态模型中我们可以把一个模型当作一个模型的类,比如用A模型来描述B模型,此时A就是B的类,在动态模型编程中称A是B的描述者。
有了类和对象的概念,我们也可以实现面向对象中的继承。由于在动态模型中类和对象都是模型,而模型是数据,所以像关系数据库一样,类和对象是模型间的一种逻辑关系,同时类和类之间的继承也是模型之间的一种逻辑关系。
在动态模型编程中我们定义一个模型可以继承另一个不同的模型,从而继承被继承模型的行为,而如果一个模型作为另一个模型的描述者(即类),比如A是B的描述者,那么B也拥有A的行为。
动态模型实际上是一个动态对象的方法,即类和对象的关系是可以随时变化的,这样可以随时添加和修改对象以及对象的类别,从而实现了系统的动态性。
由于动态模型的核心是变化,所以这也决定了它是一个运行时的编程方法,我们可以在运行时为系统增加新的对象和类,也可以随时修改已有的对象和类,这样系统的功能就能够在运行时随时改变,从而系统是一个可以通过修改自己而不断完善的动态系统了。
用虚拟世界做类比可以更好的理解动态模型编程的功能。实现了动态模型编程的系统好比一个虚拟世界,这个系统中有各种各样的事物(对象),而且还可以随时加入新的对象和类等,而这在理论上并不需要对系统的底层重新编码也不需要重启系统,这样的系统是动态可变的。
Copyright © 2007-2014 XWorker.org 版权所有