Cairngorm 2.1前阵子在MAX2006中发布了,今天我们来仔细查看2.1到底有那些变化,并给出2.1版本的基于cairngorm的应用开发示例,希望能对您的cairngorm旅程有些帮助…
Cairngorm 2.1前阵子在MAX2006中发布了,今天我们来仔细查看2.1到底有那些变化,并给出2.1版本的基于cairngorm的应用开发示例,希望能对您的cairngorm旅程有些帮助。
相对2.0版本来说,2.1版本最大的变化就是com.adobe.cairngorm.business.Responder接口的退役,而mx.rpc.IResponder接口的粉墨登场。为什么要用IResponder替代原来的Responder接口呢,darron schall的这篇《Why I don’t use Cairngorm’s Responder》对此有非常详细的叙述,简单的来说,有以下几点好处:
- IResponder是Flex2框架的一部分
- IResponder与mx.rpc包中的其他组件有更好的交互性,特别是:AsyncToken
- IResponder可以添加多个数据返回响应监听,而之前的Responder接口每次只能有一个方法响应数据的返回:
- 原来的Cairngorm Response接口实现中,在RemoteService中需要一些非类型安全的硬编码,并且这些编码会造成某些运行时错误:
[actionscript]
//In RemoteDelegate.as:
public function makeRemoteCall():void
{
// 注意这里...
var call:AsyncToken = service.aRemoteMethod();
call.resultHandler = responder.onResult;
call.faultHandler = responder.onFault;
}
[xml]
// In Services.mxml
<mx:RemoteObject id="someService"
result="event.token.resultHandler( event )"
fault="event.token.faultHandler( event )" ... />
所以,为了解决后面两点的问题,Cairngorm框架使用IResponder替代了Responder,相应的我们的Comand就需要实现IResponder的下面两个方法:
[actionscript] public function fault(info:Object):void public function result(data:Object):void
然后在RemoteDelegate中使用如下的方法添加监听就可以了:
[actionscript]
public function remoteCall(URL:String):void
{
service.url=URL;
var token:AsyncToken=service.send();
token.addResponder( responder );
//这里可以添加多个Responder...
}
2.1其他的变化还有Command被ICommand接口取代,不像之前的Command接口,ICommand接口定义了一个方法来规范Command调用方法的编写:
[actionscript]public function execute(event:CairngormEvent):void
还有的就是ValueObject对象被com.adobe.cairngorm.vo.IValueObject取代了,详细的2.1的变化清单如下:
- Responder has been deprecated. Use mx.rpc.IResponder*
- Command has been deprecated. Use com.adobe.cairngorm.commands.ICommand*
- ValueObject has been deprecated. Use com.adobe.cairngorm.vo.IValueObject*
- ServiceLocator.getService() has been deprecated. Use ServiceLocator.getRemoteObject( string )*
- ServiceLocator.getInvokerService() has been deprecated.*
- IServiceLocator interface has been created to support unit testing
- ServiceLocator has security methods added
- FrontControler.executeCommand() and getCommand() visibility has been changed to protected
- Error messages have been internationalized
最后,我写了个基于Cairngorm 2.1的示例,该示例的功能很简单,就是访问远端的一个xml文件,将其内容显示出来,这样的功能非常简单,根本就没必要用Cairngorm实现,但是为了我们演示代码的简洁性、易懂性,为了更好的让大家专注于Cairngorm 2.1的实现,我还是选择了这样一个非常简单、对于Cairngorm来说大材小用的案例:

O comments at "细看Cairngorm 2.1的变化"
Comment Now!