在以前的随笔中,介绍了一些关于Agile Framework的功能部分的特点,不过都还是一些“点”的介绍,这次介绍一下Agile Framework的整体模块组成结构,让大家对Agile Framework有一个从点到面的了解。
Agile Framework目前主要包含两个部分:客户端部分和服务器部分。在服务器端,AF的采用了Castle作为核心的的IoC容器,由于采用了这种轻量级容器技术,使得AF可以很容易的支持“POJO”业务对象(这是Java里面的说法,不知道在.Net里面同样的意思应该怎么叫)。而在客户端,AF采用的是Composite UI Application Block,它是一个结构非常酷的SmartClient框架,而且本身也带有一个IoC容器。由于采用了CAB技术,使AF拥有了非常强大灵活的界面插件能力。
Caslte拥有一个非常强大的IoC核心以及MonoRails Web框架和ActiveRecord数据框架,但是缺少一个强大的SmartClient客户端。而CAB有很强大的客户端框架,却没有相应的服务器部分。在一个企业应用架构中,往往需要同时构建服务器端和客户端应用,假如单独的使用它们的话会非常麻烦。
AF对这两个容器框架都做了许多额外的扩展工作,把它们包装起来,使得这两个框架无缝的融合为一体。同时在这个基础之上做了许多对构件企业应用程序非常有帮助的服务集成和扩展。
这幅图表述了Agile Framework的基本模块结构和开发模式,Agile Framework提供了通明的分布式计算能力,客户端组件和服务器端组件实际上虽然处于不同的容器之中,但是对组件来说,Agile Framework提供了几乎完全相同的容器模型,客户端组件访问服务器端服务就好像访问本地容器中的服务一样。
开发人员在Agile Framework框架上编写应用程序,目前可以获得如下好处:
- 分布式容器。只需要编写客户端界面控件和服务器端的业务逻辑组件,并“插入”到框架之中就可以。由框架提供依赖注入能力。并且依赖关系可以是分布式的,比如你可以在客户端插件中声明一个服务器端组件的依赖请求。
- 分布式事件。无论是服务器端还是客户端组件,只要是放到Agile Framework中,所有的组件都获得了完整的通信能力,除了可以请求组件的服务外,还可以互相之间订阅事件。并且事件是完全解耦的,并不需要显式的挂接事件,只需要声明一下事件发送者和订阅者的标记,Agile Framework会自动的连接有对应关系的事件。同样,事件也是分布式的,你可以在客户端组件中订阅服务器端的事件。
- 透明的底层传输机制。目前在Agile Framework中同时支持两种数据传输方式:Web Service和Remoting。你可以根据实际使用环境的需要灵活的配置。你可以在Intranet中将传输方式配置成Remoting,提高性能。或者将传输方式配置成Web Service,以满足通过企业防火墙的需要。而这一切对组件来说都是透明的,完全不用关心底层具体的传输方式。甚至你可以配置成“自动检测”,框架首先尝试采用Remoting,如果不能用Remoting就自动切换成Web Service。
- 自动离线处理机制。不需要再去编写复杂的离线处理任务,Agile Framework已经提供了一套完善的离线处理机制,采用Agile Framework编写的应用程序可以非常轻易的拥有离线处理功能。让你的应用程序拥有非常好客户体验。
- 常用服务和类库。与Castle和CAB不一样,Agile Framework是一个企业应用开发框架,所以内置了许多帮助开发企业级应用程序的服务和类库,比如日志服务、事务服务、工作流服务、缓存服务、安全认证服务、异常管理服务等等。此外还提供了大量的非常有用的帮助类库(Helper),比如单位转换、动态排序、表达式计算、日期转换、加密压缩、文件操作等等在企业开发中会频频使用到的基础功能。
对Agile Framework的结构总体概览就介绍到这里,以后会详细的介绍Agile Framwork的一些内部技术细节以及框架所提供的各种服务和Helper类的功能介绍和使用方法。
Agile Framework是一个基于.Net 2.0技术的开源企业开发框架,目前Agilelabs Team正在加紧开发中,期望能尽早的放出第一个版本。希望了解更多信息请访问敏捷实验室。