Cairngorm是Iteration::two的开源项目, 是使用macromedia Flex的RIA开发的最佳实践(best-practice)框架.
在Cairngorm基础上开发RIA, 将会在Iteration::two的专家体系和现有的灵活可维护企业解决方案中达到平衡.
Cairngorm本身并不是一个完整的企业应用, 它只是提供了一个开发的骨架, Iteration::two称之为体系.
在这个体系中包括以下几个部分:
1. Business(业务逻辑部分)
2. Command(命令部分)
3. Control(控制部分)
4. Model(数据模型)
5. View(界面视图)
6. VO(ValueObject)
我们从Control说起:
在Control中, 定义了3个基类: Event, EventBroadcaster, FrontController.
Event用于在应用不同的层之间传递事件, 并携带事件的数据. 包含type和data两个成员.
type存放一个区别不同事件的名称,将会在FrontController中进行注册.
而在命令(Command)类中, 会对事件进行响应.
EventBroadcaster是一个单例类(singleton), 用于广播用户动作对应的事件. 使用方法: EventBroadcaster.getInstance().broadcastEvent( ... )
FrontController稍微复杂一点点. 用于将特定的用户动作分发到指定的命令类.
FrontConroller是请求处理的核心类. 整个体系中遍布的EventBroadcaster.getInstance().broadcastEvent( ... )这样的调用,
都是用来通知监听控制器: 用户发出了请求. 在实际应用中, 开发者应该生成一个FrontContoller的子类,
并在构造函数中调用addCommand()注册预期事件的处理命令. FrontController的具体实现类应该创建一次而且只能创建一次.
通常的做法是这样的: 在主应用中, 将FrontController的子类作为一个Tag进行申明,
* <p>
* <code>
* <mx:Application xmlns:control="com.domain.project.control.LoginController" ... >
*
* <control:LoginController id="controller" />
*
* ...
*
* </code>
* </p>
FrontController的处理实质上是这样的, 在调用addCommamd时, 将处理命令保存在数组中, 将与之对应的事件处理对象注册为FrontController本身,
在事件触发, 调用FrontController的handleEvent时, 调用executeCommand, 在executeCommand中, 先在数组查找出事件对应的命令,
调用命令的execute方法. 这就要求所有的命令都实现Command接口
(内容较多, 未完待续)