在XWorker中还可以非常容易的定义复杂的框架,方法是使用把不同的框架事物组合起来,另外使用事物间的继承关系可以让框架定义更简单。

    本文档以WEB编程的一个SimpleControl框架为例,SimpleControl是一个典型的WEB框架,是MVC的架构。

1.复杂的框架是简单框架的组合

    在创建框架和使用框架里我们定义了SQLSelector这样简单的框架,实际上通过简单的框架可以很容易的组合成复杂的框架。

    我们以WEB编程的SimpleControl框架为例,它是一个MVC的结构,包含业务层(Model)、界面层(View)和控制层,其中业务层简化为执行一个动作,界面层也用事物框架编写,而控制层其实就是自己,它的编辑截图如下。

    如上图,SimpleControl的动作是业务逻辑的框架,界面定义是界面的框架,结果处理是控制部分,结果是业务逻辑的执行结果和界面的匹配。

2.使用继承关系扩充框架

    在SimpleControl里动作和界面框架其实是非常多的,比如动作可以用Java实现也可以用Groovy、Jython等实现,还可以用自定义的框架实现,而界面也可以是HTML,也可以是Extjs,也可以是JQueryUI等,因此全部的动作和界面框架都在SimpleControl里定义几乎是不可能的。并且如果存在多人合作的情况,即每个人都单独编写动作或界面框架,哪最终是需要把每个人的框架集合起来的。

    解决以上问题的办法就是使用框架的继承,在XWorker里就是使用事物的继承关系。

2.1使用和定义继承

    比如动作继承了xworker.lang.MetaDescriptor3/@actions。

    而xworker.lang.MetaDescriptor3/@actions这个事物同样使用了继承。

    xworker.lang.actions.Actions才是所有动作的集合定义,在它下面定义了多种动作框架。

    一些单独编写的框架,比如第三方定义的动作框架可以不直接添加到Actions动作集合下,还可以通过注册的方式软性的添加到Actions下,如下图。

2.2继承的实际效果

    SimpleControl的动作框架使用了继承之后,效果是可以用多种方式来编写业务逻辑,比如使用Java或使用Groovy或其他等,如下图。

2.3其他继承

    SimpleControl中的界面框架也使用了继承,这里就不详细说明了,方法和动作的继承是一样的。

3.SimpleControl框架的解释代码

    由于SimpleControl是有动作、界面和结果等小的框架组成的,因此各自框架的解释代码在各自的框架里,这里主要考虑SimpleControl本身的解释代码,如果不考虑子框架的解释,总框架的解释代码还是很简单的,它的Java代码如下。

package xworker.http.controls;

import java.util.List;

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

public class SimpleControlCreator {
	public static String httpDo(ActionContext actionContext) throws Exception{
		//获取SimpleControl框架配置本身
        Thing self = (Thing) actionContext.get("self");
        
        String result = "success";
        //执行业务逻辑,并返回结果
        Object r = self.doAction("doAction", actionContext);
        if(r instanceof String){
            result = (String) r;
        }
        
        //寻找并处理结果
        List<Thing> results = self.getChilds("result");
		Thing resultObject = null;
		for(int i=0; i<results.size(); i++){
			Thing rObject = results.get(i);
			if(rObject.getMetadata().getName().equals(result)){	
				resultObject = rObject;
                break;
			}
		}
		
		//执行结果的方法,相当于输出界面
		if(resultObject != null){
			resultObject.doAction("doResult", actionContext);
		}
		
		return result;
       
    }

}

4.SimpleControl框架的应用

    请参看WEB框架演示视频

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