0

面向對象的原則之一是代碼的封裝。每個對象都知道如何實現它的方法。對象只知道如何調用以及如何獲取其他對象方法的結果。異步過程和麪向對象的範例

當對象方法調用遠程服務時,我看不到如何實現此原則。

例如:

Class A{ 

    method1(){ 
    ... 
    } 


    method2(){ 
     callRemote(receiveAnswer); 
    } 

    receiveAnswer(answer){ 
    ... 
    } 

} 

Class B{ 

    main(){ 

     A a = new A(); 

     a.method2(); 

     a.method1(); 

    } 

} 

方法2()類A需要receiveAnswer()來完成本身=>它的邏輯的一部分是內部receiveAnswer()。並且只有在遠程服務發送答案後才執行receiveAnswer()。

在B類中,main()直接執行a.method2()然後執行a.method1(),而無需等待遠程服務回答method2()。

很多時候,method1()需要完整執行method2()(包括處理遠程服務應答)才能正確執行。

我應該將調用外部化到類B中的遠程服務(這似乎不太合適,因爲在那種情況下,我會向外部公開一個對象邏輯)?還有其他的方式嗎?

感謝;)

PS:我編碼在ActionScript 3

回答

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 
    }   
}