Actionscript 3.0 で初めてカスタム イベントを使用していますが、最適な設計方法がわかりません。いくつかのイベントが必要です。さまざまな種類のデータを転送する必要があるものもあれば、そうでないものもあります。単一のクラスを使用してそれらすべてを実装する必要があるのか 、それともさまざまな種類の目的で個別のクラスを使用する必要があるのか わかりません。あらゆる種類のデータに対して独自のイベント クラスを作成することは、これらのイベントが基本的にすべて同じことを行うため、少し面倒に思えます。しかし、単一のクラスのオプションもあまり好きではありません。このクラスには、多くの場合使用されないあらゆる種類のデータを格納するためのジェネリック変数が必要です。また、そこからアクセスしたいすべてのデータを型キャストする必要があります。また、輸送するオブジェクトが複数ある場合はどうすればよいでしょうか? どちらが行くべきか(スタイルに関して)、または私が考えていなかった別の方法がありますか?
4 に答える
文脈によると思います。Cairngorm の一般的なベスト プラクティスは、新しいイベントの目的を厳しく制限することです。イベント タイプからイベント クラス、コマンドへの 1 対 1 のマッピングをよく見てきました。これは、明示的でなければ意味がありません。
一方、FlexEvent にはさまざまな用途があり、(技術的には) カスタム イベントです。それはそのコンテキストで完全に理にかなっています-それは通常、DisplayObjectのレンダリングイベントと並行して機能しています...
新しいイベント TYPE について話しているだけの場合 (追加のデータを運ぶ必要がない場合) は、車輪を再発明しないでください。イベントはパラメーターとして型を取ります。新しい型を public static 定数に格納してから、それを使用します。
データを運ぶ必要がある場合、私の一般的な推奨事項は、可能な限りエラーまたは厳密に型指定された変数の側にあることです。これにより、コンパイル時のエラーの利点が得られます。これをより汎用的にできる (たとえば、ArrayCollection の代わりに IList を使用する) ことができれば、それはより良いことですが、それを除けば、コードをより明示的にするほど、コードはより簡単になります。
適切なバランスを見つけることは綱渡りになり、これの多くは個人的な好みによるものだと思いますが、いくつかの理由から、イベントは少ないよりも多いほうがよいと常に感じてきました。
1) コードの最適化 - 文字列を送信する必要があるだけの場合は、オブジェクトに渡さないでください。必要以上に複雑になります。同様に、データ ペイロードが巨大で複雑でなければならない場合、単一のオブジェクトでは不十分な場合があります。データ ペイロードに基づいてさまざまな種類のイベントを作成することは、最低限必要なことだと思います。
2) コードの可読性 - はい、数十億のイベントがあるケアンゴームのような場所では複雑になりますが、何を知っていますか? 私は常にイベントが何をするかを正確に知っており、それがどこから来ているかについて疑問を抱くことはありません. A) 他の人があなたのコードを読むか、B) 各イベントが何をするかを時間の経過とともに忘れる可能性があるほど大きなプロジェクトに取り組んでいる場合は、すべてのイベントをカスタム クラスに分割することをお勧めします。
それが役立つことを願っています!
1 つのカスタム イベント クラスを使用するだけで十分だと思います。
public class CustomEvent extends Event {
public var data:Object;
public function CustomEvent(type:String, cData:Object) {
super(type, true);
this.data = cData;
return;
}
}
また、データオブジェクトを介してデータを渡すカスタムイベントをディスパッチします。dispatchEvent(new CustomEvent("eventWithData", {somedata:value, somemoredata:value}));
実際には、他のほとんどのコードと同様に、何が起こっているのかを理解するのがどれほど簡単かによって異なります。1 つのクラスの方が簡単な場合は 1 つを使用し、ユースケース固有のクラスが多い方が簡単な場合は、より多くのクラスを使用します。
Actionscript に関して言えば、クラスを 1 つだけ持つことで数バイトを節約できますが、プログラミングのベスト プラクティスは常に、コードの再利用に最適で、コードの理解に最も簡単なものです。
カスタム イベントにタイプ固有のパブリック プロパティを好きなだけ配置して、1 つの汎用データ プロパティを使用する代わりに、必要なものだけを割り当てたり取得したりすることもできます。