XWorker是一个动态系统,在XWorker的发展历程中提到XWorker的初始目标是框架编程,实际上XWorker也可以看作是一个框架编程系统。
从软件设计角度,框架是一个可复用的软件架构解决方案,规定了应用的体系结构,阐明软件体系结构中各层次间及其层次内部各组件间的关系,责任分配和控制流程,表现为一组接口,抽象类以及实例间协作的方法。
因为软件系统发展到今天已经很复杂了,特别是服务器端软件,涉及到的知识,内容,问题太多。在某些方面使用别人成熟的框架,就相当于让别人帮你完成一些基础工作,你只需要集中精力完成系统的业务逻辑设计。而且框架一般是成熟,稳健的,可以处理系统很多细节问题,比如,事物处理,安全性,数据流控制等问题。还有框架一般都经过很多人使用,所以结构很好,所以扩展性也很好,而且它是不断升级的,可以直接享受别人升级代码带来的好处。
编程中的框架有各种各样的,根据XWorker的特点我们主要讨论具有配置和引擎的框架类型。
一个成品的框架通常会提供给使用者编写的配置,比如Spring的Bean配置文件和Hibernate的映射文件等。
框架还应该具有引擎,引擎是用来解释执行配置文件的。
以Spring的Bean框架为例。
配置:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <!-- 定义第一个Bean实例:bean1 --> <bean id="bean1" class="com.Bean1" /> <!-- 定义第二个Bean实例:bean2 --> <bean id="bean2" class="com.Bean2" /> </bean>
调用引擎的代码:
public class SpringTest { public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml"); System.out.println(ctx.getBean("bean1")); System.out.println(ctx.getBean("bean2")); } }
在Java编程中现在已经有很多框架可以使用了,比如Spring和Hibernate等,但是调用它们的方法是不统一的,尤其是当自己要编写多个框架时,框架的调用不统一会给自己造出麻烦。
XWorker可以看作是统一各种框架的一种解决方案,它是通过配置和引擎的反转实现的。
在使用传统的框架时通常是用引擎来读取配置,然后再执行各种功能,比如下面的这段代码:
public class SpringTest { public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml"); System.out.println(ctx.getBean("bean1")); System.out.println(ctx.getBean("bean2")); } }
而引擎和配置的反转则是要把配置放在首位,使用配置来调用引擎,从而把引擎隐藏。
public class SpringTest{ public static void main(String[] args){ //读取框架的配置 Config config = EngineManager.loadConfig("Spring", "bean.xml"); //通过配置获取Bean,在配置里调用引擎 Object Bean1 = config.doAction("getBean"); } }
XWorker的框架编程就是把引擎和配置反转了,只是XWorker没有再采用配置和引擎的概念,而是使用了世界(World)和事物(Thing)两个概念。
事物相当于框架编程中的配置,事物有doAction的方法,引擎在doAction方法中被调用。
世界相当于引擎的管理器,它负责管理所有的事物。
Copyright © 2007-2014 XWorker.org 版权所有