X-Meta引擎

    X-Meta引擎是使用Java实现的动态模型引擎。

1.初始化引擎

    可以通过World类来初始化模型引擎,其中path参数是模型应用的目录,一般是引擎的工作目录,目录下可以包含类库、模型库和生成的临时文件等。

import org.xmeta.World;

//Java项目可以使用当前目录作为引擎的工作目录
World world = World.getInstance();
world.init(".");

2.获取模型

    可以通过模型的路径来获取一个模型.模型的路径规则基本同Java类名的规则,只是模型的路径还可以包含子节点的路径。如test.HelloWorldModel是描述者模型的路径。

import org.xmeta.Thing;

//获得描述者模型
Thing thing = world.getThing("test.HelloWorldModel");

3.作为结构化数据时相关的API

//获取属性的值
Object value = thing.get("name");

//设置属性的值
thing.set("name", "Hello World");

//获取属性的值并转为相应的类型,支持常见类型的转换
//一般是getX(Stirng name)方法,其中X是对应的类型
int age = thing.getInt("age");  
//注:属性未必需要在模型(XML)中定义,但序列化存储时未定义的属性不会被保存到XML中

//获取模型的子节点
List<Thing> childs = thing.getChilds();

4.动作和行为

    把模型转化为动作执行。

import org.xmeta.Thing;
import org.xmeta.Aciton;
import org.xmeta.ActionContext;

//获取HelloWorldExample模型
Thing helloWorldExample = world.getThing("test.HelloWorldExample");

//转化为动作,和Java做对比动作类似于静态方法
Action helloWorldAction = helloWorldExample .getAction();

//执行动作
//动作和对象的行为执行时需要动作上下文(ActionContext),动作上下文用于管理变量和线程状态等
helloWorldAction.run(new ActionContext());

    把模型作为对象,执行它的行为

import org.xmeta.Thing; 
import org.xmeta.ActionContext;

//获取HelloWorldExample模型
Thing helloWorldExample = world.getThing("test.HelloWorldExample");
//执行HelloWorldExample的run方法。
//执行对象的行为时,对象本身会以变量名self(相当于this变量)放到动作上下文中,动作可以通过self变量访问对象模型。
helloWorldExample.doAction("run", new ActionContext());

    传参数的方法,动作执行时也适用。

//传参,方法1,参数名+参数值,可以设置多个,参数名和参数值成对出现
Object result = thing.doAction("xxx", new ActionContext(), "p1", p1Value,  "p2", p2Value...);

//传参,方法2,通过ActionContext设置参数
ActionContext actionContext = new ActionContext();
actionContext.peek().put("p1", p1Value);
actionContext.peek().put("p2", p2Value);
......
Object result = thing.doAction("xxx", actionContext);

    动作和行为的区别,执行动作时模型不会把自己作为self变量传入到动作上下文中,而作为对象执行时会。因此动作执行时没有self变量(或self变量不是它自己),而执行对象的行为时self变量是对象模型自身。

    如下面代码中self变量,在执行HelloWorldExample模型对象的run行为时,self变量时HelloWorldExample模型自身。

    public static void run(ActionContext actionContext){
        //模型实例,相当于Java的this变量的作用
        Thing self = actionContext.getObject("self");
 
        System.out.println(self.getString("message"));
    }

5.面向对象相关的方法

//获取首要描述者(类)
Thing descriptor = thing.getDescriptor();

//获取所有描述者(类)
List<Thing> descriptors = thing.getDescriptors();

//获取事物名,相当于Java的object.getClass().getSimpleName()
String thingName = thing.getThingName();

//获取继承列表
List<Thing> extends = thing.getExtends();

//获取动作行为列表
List<Thing> actions = thing.getActionThings();

  

Copyright ©  2007-2017 XWorker.org  版权所有

沪ICP备08000575号