2009-07-20 6 views
8

仕事では、私たちは巨大なフレームワークを持ち、イベントを使用してその一部から別の部分にデータを送信します。私は最近、個人的なプロジェクトを始めました。私はしばしば、イベントを使って自分のオブジェクトのやりとりをコントロールすると思います。イベントをいつ利用できますか?

たとえば、私はサウンドエフェクトを再生するミキサークラスを持っていますが、当初はサウンドエフェクトを再生するイベントを受け取るべきだと思っていました。それでは、私のクラスを静的にして電話することにしました。

Mixer.playSfx(SoundEffect) 

私のクラスです。私はこのような例がたくさんありますが、最初はイベントの実装を考えてから自分の心を変えて、それは何のためにも複雑すぎると言っています。

プロジェクトでイベントを使用するのはいつですか?場合によっては、イベントは他のテクニックよりも重大な利点がありますか?

答えて

11

通常、イベントは、オブジェクトで発生したアクションまたは状態の変更についてサブスクライバに通知するために使用します。イベントを使用することによって、異なる加入者が異なる反応を起こし、加入者(およびそのロジック)をイベントジェネレータから切り離すことによって、オブジェクトは再利用可能になります。

ミキサーの例では、サウンドエフェクトの再生の開始と終了をイベントに通知します。これをデスクトップアプリケーションで使用する場合は、これらのイベントを使用してUIのコントロールを有効/無効にすることができます。

4

サブルーチンを呼び出すとイベントを発生させることの違いは、仕様、選挙、カーディナリティ、最終的にイニシエータまたはレシーバが制御権を持つ側との関係です。呼び出しで

、イニシエータは、受信ルーチンを呼び出すためにを選出し、イニシエータ受信機を指定します。そして、多くの呼び出し元が同じサブルーチンを呼び出すことができるので、many-to-one カーディナリティにつながります。

イベントでは、イニシエータは、がそのイベントを受信するルーチンに受信されるイベントを発生させます。受信者は、をどのイニシエータから受信するかを指定します。これにより、1つのイベントソースが多数の受信者を持つことができるため、1対多のカーディナリティになります。

したがって、コールまたはイベントに関する決定は、主に、イニシエータがレシーバであるかレシーバであるかを決定するかどうかによって決まります。

3

シンプルさと再利便性のトレードオフです。

受信者がわかっていて、「To」リストに入れて送信ボタンを押すだけで、いつでも決定できる、有限の数です。そのシンプルなものは、私たちがほとんどの時間を使っているものです。これは関数を直接呼び出しています。

しかし、メーリングリストの場合、あなたはあなたの電子メールを購読しようとするユーザーの数を事前に知っていません。その場合、ユーザーが購読できるメーリングリストプログラムを作成すると、購読しているすべてのユーザーに電子メールが自動的に送信されます。これはイベントモデリングです。

上記の両方のオプションで電子メールがユーザーに送信されたとしても、電子メールを直接送信するタイミングとメーリングリストプログラムを使用するタイミングをより正確に判断できます。同じ判断を適用し、あなたがあなたの答え:)

乾杯、

アジットになるだろうことを願っています。

関連する問題