11

私はプログラミングが初めてで、ゲームコーディングのチュートリアルをたくさんチェックしています。それらのほとんどで、メソッドを直接呼び出すのではなく、カスタム イベントを使用してメソッドをトリガーしていることに気付きました。

この慣行の背後にある理由は何ですか? メソッドを呼び出すだけではないのはなぜですか?

例えば:


と の 2 つのオブジェクトがAありBます。条件がトリガーされたときに使用する必要があるAメソッドA.methodA()があります。BX

実装する理由:

B実行するAよう指示するイベントをディスパッチしますAA.methodA()

それ以外の:

B用途A.methodA()

4

5 に答える 5

16

主な理由は利害の分離です。イベントを使用する場合、クラス A はクラス B の存在を知る必要はありません (逆も同様です)。

これには次の利点があります。

  • はるかに簡単な単体テスト (クラス B なしでクラス A をテストできます)
  • クラス A または B を変更すると、コードが壊れる可能性が低くなります
  • コード内の他のクラスへの参照が少なくなり、メモリ リークの可能性が減少します。
  • よりクリーンなコード
  • より柔軟で再利用可能なコード (ディスパッチャーに追加のコードを追加することなく、他のクラスの束がすべてイベントをリッスン/応答できます)
于 2012-11-27T17:29:23.203 に答える
4

通常、大規模なアプリケーションでは、イベントを使用するとすべてを抽象化するのに役立ちます。15以上のクラスがあり、それらがすべてコントローラーにイベントをディスパッチしている場合、コードのさまざまな部分をすべて読み取って関数をトレースするよりも、何が起こっているのかを理解する方がはるかに簡単です。コールバックを使用すると、スパゲッティコードの作成が始まります。

ただし、直接関数呼び出しはイベントよりも高速に実行されます。

于 2012-11-27T16:48:26.910 に答える
2

個人的には、使いやすさのためにカスタム イベントを使用しています。何かが発生したとき (アニメーションが終了したときやダウンロード中にエラーが発生したときなど) に 1 つのクラスでイベントをディスパッチし、任意の数の他のクラスがそのイベントに基づいて任意の数の他の関数を実行することができます。さらに、再利用性のためにコーディングします。各クラスの目標は完全な独立性であるため、他のパッケージを必要とせずに任意のプロジェクトで実行できます。したがって、1 つのクラスで別のクラスのメソッドを呼び出すのではなく、2 番目のクラスがリッスンする最初のクラスからイベントをディスパッチし、そのメソッドを実行します。その後、別のプロジェクトでその最初のクラスが必要になったときに、変更する必要も機能を失うこともなく、コピー/貼り付けするだけで済みます。

編集:また、イベント引数を渡さなければならないことを回避するために、あなたが説明したことを人々が行う場合があることに注意してください。

ステージ上にボタンがあり、それをクリックできるようにする必要があるとしますが、そのメソッドを手動で呼び出すこともできる必要があります。null イベントを渡してメソッドを 1 つだけ持つことができることに気付いていない人もいます。または、null デフォルト引数として設定することもできます。以下を参照してください。

private function onClickHandler( e:MouseEvent = null ):void{
    //as long as you never reference "e" within this method, this method can be used both for MouseEvent listeners and manually calling it elsewhere in the code
}

この手法は、別のメソッドを呼び出すだけで他には何も呼び出さないイベント ハンドラーを使用しないようにするのに役立ちます。プログラミングのこの時点で、私が作成するすべての AS3 イベント ハンドラーは、デフォルトでイベント引数を null に設定します。後で物事が簡単になるだけです。

于 2012-11-27T18:04:32.210 に答える
1

これを読みたいと思うかもしれません。

また、コールバック メソッドを使用すると、カスタム イベント モデルを介さずに直接パラメータを渡すことができることに注意してください。

于 2012-11-27T19:15:18.120 に答える