在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号