2009-06-12 8 views
1

私の友人と私はそれについてのこの議論を持っているより速いですAS3のこのは、2つの間のコミュニケーション/相互作用を持つことができるように、またはイベントが行く方法です。 ClassAが構築されます場合Actionscript:イベントを使用するとオブジェクトに自己を渡す - より速く、より良いですか?

public class ClassA{ 

    public var items:Array = new Array(); 
     public function classA(){ 
     items.push(new ClassB(this)); 
     } 

     public function poke(){ 
     trace('yes, can i help you?'); 

     this.items.speak(); 
     } 
    } 



    public class ClassB{ 
     public var parentObject:Object; 
     public function classB(pobj:Object){ 
     parentobject = pobj; 
     parentobject.poke(); 
     } 

     public function speak(pobj:Object){ 
      trace('nothing, forget it!'); 
     } 
    } 

だから、そのアイテム・アレイへのClassBの新しいオブジェクトをプッシュします:このタスクを達成するためにイベントを使用すると、かなり標準ですが、ここで問題を説明するためにいくつかのダミーコードがあります。 ClassBのコンストラクタは、ClassBのspeak()関数を即座に呼び出すClass-Aインスタンスのpoke()を呼び出します。

この方法の正しい用語は何ですか(または偶数がある場合)。私の友人は、多くのオブジェクトを使用するとコードがより速く実行されると感じていますが、ガベージコレクタを混乱させる可能性があるため、疑問に思っています。

このトピックに関するあなたの考えは?このトピックについて読むにはどのような情報源をお勧めしますか?

答えて

8

違いは、イベントがクラスをより良く分離することです。 Couplingについて読む

あなたが指定したコードでは、クラスBはクラスAが何であるかを知る必要があり、クラスAはクラスBが何であるかを知る必要があります。

イベントでは、クラスが知る必要があるのは、リスナーを追加するオブジェクトのインスタンスを見つけることができる場所だけです。呼び出す関数を知る必要はなく、addEventListener以外の関数を呼び出す必要もありません。

ディスパッチングオブジェクトはリスナーについて何も知らない。

メッセージを渡すイベントの方法は、クラスの緊密な相互依存性を取り除き、メンテナンスやバグ発見に問題を引き起こす可能性があります。できるだけ別のオブジェクトについて知っている方がよいでしょう。ディスパッチングオブジェクトは、機能や内部の詳細を他のオブジェクトに公開することなく、何が起きているのかを宣伝できるため、イベントは素晴らしいです。

参照: Loose CouplingおよびCohesion

1

コードサンプルでは、​​基本的に2つのオブジェクトとして記述された1つの機能単位があります。コミュニケーションはおそらくかなり速いですが、私は人間的に目立つとは思わないでしょう。

全体として、この種の緊密に結合されたアプローチは、アプリケーションの複雑さを非常に厳しく制限し、メッセージング速度を最適化する必要性が実際には存在しないようにします。

0

kekoavとrhtxの回答に同意しますが、最適化を必要としないものを最適化しようとしています。最後の手段として、実際に減速に気づいた場合に、単純なメソッド呼び出しのイベントを置き換えることができますが、何が速いか遅いかを推測するのは無意味です。

関連する問題