面向对象原则之一是代码的封装。每个对象都知道如何实现其方法。对象只知道如何调用以及如何获取其他对象的结果。方法
当对象方法调用远程服务时,我不知道如何实现这个原则。
例如:
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中编码
答案 0 :(得分:1)
我是否应该将对B类远程服务的调用外部化
你不应该。对于异步进程,您应该使用回调或观察者:EventDispatcher,AS3Signals或简单函数回调。
所以它写着:
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
}
}