异步过程和面向对象的范例

时间:2014-03-26 16:07:37

标签: actionscript-3 asynchronous remote-access object-oriented-analysis

面向对象原则之一是代码的封装。每个对象都知道如何实现其方法。对象只知道如何调用以及如何获取其他对象的结果。方法

当对象方法调用远程服务时,我不知道如何实现这个原则。

例如:

Class A{

    method1(){
    ...
    }


    method2(){
        callRemote(receiveAnswer);
    }

    receiveAnswer(answer){
    ...
    }

}

Class B{

    main(){

        A a = new A();

        a.method2();

        a.method1();

    }

}

类A中的method2()需要receiveAnswer()来完成自己=>其逻辑的一部分在receiveAnswer()内。只有在远程服务发送答案后才会执行receiveAnswer()。

在B类中,main()直接执行a.method2()然后执行a.method1(),而不等待远程服务回答method2()。

通常,method1()需要完全执行method2()(包括处理远程服务答案)才能正确执行。

我是否应该将对B类远程服务的调用外部化(这似乎不太合适,因为在这种情况下我会将对象逻辑暴露给外部)?还有其他办法吗?

谢谢;)

PS:我在ActionScript 3中编码

1 个答案:

答案 0 :(得分:1)

  

我是否应该将对B类远程服务的调用外部化

你不应该。对于异步进程,您应该使用回调或观察者:EventDispatcherAS3Signals或简单函数回调。

所以它写着:

Class B{

    main(){

        var a: A = new A();

        //EventDispatcher
        //a.addEventListener(Event.COMPLETE, onComplete);

        //Signals
        //a.complete.add(onComplete);

        //Callback
        //a.method(onComplete);

        a.startAsyncProcess();
    }

    onComplete(){
        //Magic with a result
    }        
}