【转】 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接口;这确保了开发者可以添加一个
1、Command类产生一个业务代理(delegate)的实例;result()犯法来处理任何
Delegate结果,一个fault()方法来处理所有
Delegate的错误。
整个工作流程可以描述如下:
2、Command类调用delegate中的业务处理方法,上例中为getProducts();
3、Delegate查找到service,并调用service;
4、过了一会,服务器返回结果给delegate;
5、Delegate立即将结果传给command的result()方法或者调用command的fault()方法。通过这个机制的运用,一方面使得Delegate可以被重用,另一方面将服务器端调用进行了封装,delegate变成了客户端代码和服务器端代码的唯一接口。这样做也为客户端和服务器端代码分别开发提供了可能(我们在写客户端程序是不一定服务器端程序已经就绪,只需要它提供一些静态试验数据(或称为为数据:dummy data)即可)。