symfony キャンプ 2007

どうもキャンプといわれると「ビリーズブートキャンプ」しか思い浮かばないのですが、(それはさておき)symfonyを開発・メンテナンスしているSensioがSymfonyCampというイベントを開催し、そのときに行ったsymfonyの今後についてのプレゼン資料が公開されています。

http://www.symfony-project.com/blog/2007/09/07/symfony-camp

新しい機能もさておき、どのようなリファクタリングを行っていくかの説明が興味深いですね。
・既にフォーラムなどで議論されていたシングルトン問題(シングルトンはsfContextだけにする)について
・各オブジェクトの依存性を低くするために用意するsfEventDispatcherの説明

ちょっとしたデザインパターン入門のような内容です。
資料の中ではsfUserオブジェクトのcultureが変更された場合に自動的にsfI18Nの指定したコールバック(listenToChangeCultureEvent)が呼び出されるというイベントドリブンな手続きについて説明がされています。

// sfUser
$event = new sfEvent($this, 'user.change_culture', array('culture' => $culture));
$dispatcher->notify($event);
// sfI18N
$callback = array($this, 'listenToChangeCultureEvent');
$dispatcher->connect('user.change_culture', $callback);

同じデザインパターンの実装例としてPEARのEvent_Dispatcherがあります。このパッケージを使って開発したことがあるのですが、結構お勧めです。既に作成したオブジェクトに新しい機能を実装する場合にお互いの存在を気にしないで済みますからね。