イベントドリブンのモデルには pull 型と push 型がある

Observer パターン、というか一般的なイベントドリブンのモデルには、pull 型と push 型がある。オブジェクト倶楽部の説明がわかりやすい。

  1. pull 型 - Observer 側が通知受理時に情報を Observable 側に問い合わせる
  2. push 型 - Observable 側が通知時に情報を Observer に渡す

単純なコードにすると、pull 型は

hoge.addEventListener(Event.CHANGE, function(event:Event):void {
trace(event.target.foo);
});

push 型は、

hoge.addEventListener(Event.CHANGE, function(event:Event):void {
trace(event.foo);
});

となる。

自分はその辺は割といい加減 (pull 型をよく使う) に設計しているが、依存関係が異なることに注意したい。

上記のコードでは、addEventListener しているコンテキストでイベントの処理をしているので、pull 型でも push 型でも、実質的な依存度は同じだが、

hoge.addEventListener(Event.CHANGE, dispatchEvent);

このコードでは、hoge の存在を知らない別のコンテキストでイベント処理が行われる (委譲) ので、push 型が適している。