首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络基础 >

【转】 flex 框架 Cairngorm 中Command、Delegate、Service交互详解(对pureMVC框架完全实用)

2012-11-14 
【转】 flex 框架 Cairngorm 中Command、Delegate、Service交互详解(对pureMVC框架完全适用)Command、Delegate、

【转】 flex 框架 Cairngorm 中Command、Delegate、Service交互详解(对pureMVC框架完全适用)

Command、Delegate、Service这三者的关系简单说来就是前者调用后者,后者为前者返回数据的关系!
让我们以参考资料中的源码为例详细描述一下:
Command的源代码如下,类名叫:GetProductsCommand

?

注意代码中的这一行:

var delegate : ProductDelegate = new ProductDelegate(?this?);

这里将GetProductsCommand类的实例作为参数(this)传递给ProductDelegate的构造函数,这样做就是告诉Delegate,该Command将处理所有通过Dlegate发送的请求所返回的结果。在Delgate中,这个接收所有返回结果的Delegate成为Responder。如下Delegate的源码(ProductDelegate.as)中可以看到:

?

从第一段代码中可以看到,Command类实现了ICommand和 IResponder两个接口,当它选择扮演responder的角色,Command实现FLEX定义的IResponder接口;这确保了开发者可以添加一个result()犯法来处理任何Delegate结果,一个fault()方法来处理所有Delegate的错误。

整个工作流程可以描述如下:

1、Command类产生一个业务代理(delegate)的实例;
2、Command类调用delegate中的业务处理方法,上例中为getProducts();
3、Delegate查找到service,并调用service;
4、过了一会,服务器返回结果给delegate;
5、Delegate立即将结果传给command的result()方法或者调用command的fault()方法。

通过这个机制的运用,一方面使得Delegate可以被重用,另一方面将服务器端调用进行了封装,delegate变成了客户端代码和服务器端代码的唯一接口。这样做也为客户端和服务器端代码分别开发提供了可能(我们在写客户端程序是不一定服务器端程序已经就绪,只需要它提供一些静态试验数据(或称为为数据:dummy data)即可)。

热点排行