现在的位置: 首页 > 综合 > 正文

Agile Framework功能介绍(2):框架事件模型

2013年04月19日 ⁄ 综合 ⁄ 共 1346字 ⁄ 字号 评论关闭

上一回简单介绍了一下Agile Framework的事件自动连接功能,这次来详细介绍一下事件功能的实现原理。

在Agile Framework中,只要为组件分别标记上EventPublisher和EventSubscriber就可以自动实现互相之间的连接,实现了事件的完全解耦。这个功能和Castle容器的EventWiringFacility的功能很像(在Composite UI Application Block中也有同样的事件机制)。但是和它们不同的是,Castle和CAB都只支持同一个容器内的事件互相连接。而Agile Framework的容器是分布式的,客户端组件和服务器组件都可以被加入到容器中,因此,Agile Framework的事件传递机制也是分布式的。简单的说,在服务器的业务组件中定义的事件也可以被客户端的组件接收到。

为了实现这个功能首先需要解决一个难题:因为Agile Framework可以同时支持Web Service和Remoting数据传输接口(只需要在配置文件中简单的修改一下配置,框架采用什么类型的传输接口对开发人员来说是完全透明的),所以就必须让事件传递机制同时支持这两种接口。用Remoting还比较好解决,因为Remoting本身就支持远程的事件机制。但是Web Service就麻烦了,它只支持简单请求/响应的无状态访问模型,无法主动让服务器发消息给客户端。

Agile Framework采用的Event Dispatch机制比较完美的解决了这个问题,以下是框架的事件模型图:

在整个结构中,Event Dispather是所有事件的中转站,它订阅了系统中所有的事件,并且知道每一个事件接受者。

事件的传递机制简单描述如下:

当Event Dispatcher接收到一个被触发的事件后,他会检查事件订阅列表,逐一将事件分发到每个接收者,根据事件接收者所处的位置不同,这时会有如下几种不同的情况:

  1. 假如事件接受者就在容器内部,Event Dispatcher会直接将事件发送到该接收者。
  2. 假如事件接收者是在客户端(Smart Client)并且接口是Remoting,Event Dispatcher会调用Remoting的远程接口将事件发送到客户端。
  3. 假如事件接收者是在客户端(Smart Client)并且接口是Web Service,Event Dispatcher会将事件发送给一个叫Event Holder的对象,这个对象负责接收所有发送给客户端的事件,并且保存下来。在客户端框架会有一个叫Event Detector的对象定时通过Web Service进行轮询来检查EventHolder中的事件。假如有事件是被发送到该客户端的,就会接受该事件数据并转发给客户端的事件接收方法。
  4. 如果事件接收者是Web页面,在Agile Framework中也有一个功能类似Event Detector的Ajax对象也会对Event Holder进行轮询。因此在Agile Framework中业务组件所定义的事件也能被Web页面对象接收到。

以上就是Agile Framework事件分发机制的基本原理。Agile Framework是一个开源的基于.Net 2.0技术的中间件平台,目前正在开发中,更多信息请访问敏捷实验室

抱歉!评论已关闭.