7

私はObserver Patternを私のアプリケーションに実装しようとしています(PHPではなく、Symfonyのコンポーネントを使用していないのがなぜですか)。Symfony EventDispatcherは、クラスベースの伝播の代わりにイベントに対して任意の名前を使用するのはなぜですか?

コンポーネントが継承を使用してイベントのツリー全体をリッスンできるようにするために、コンポーネントがイベントを伝播または聴取するためにクラスを使用していないのが奇妙です。

名前ベースのリスナーを使用することの利点がわかりません。熟考してもらえますか?

答えて

8

私の意見では、このパターン(Mediator pattern)を使用している理由は、Symfony2がカップリングよりも結束を好むからです。

Symfony docsから:

反対指向のコードはコード 拡張性を確保するために長い道のりを行ってきました。 の責任を明確に定義したクラスを作成することで、コードの柔軟性が向上し、開発者はサブクラスを使用してそれらの動作を変更することができます。しかし が自分の変更をサブクラス 自身のサブクラスを作成した他の開発者と共有したい場合、コード継承はもはや答えにはなりません。

プロジェクトにプラグインシステムを提供する実際の例を考えてみましょう。 プラグインはメソッドを追加するか、メソッドが実行される前または後に他の プラグインと干渉することなく何かを実行する必要があります。単一の継承で解決するのは簡単な問題ではなく、 と複数の継承(PHPで可能でした)には独自の という欠点があります。

Symfony2イベントディスパッチャコンポーネントは、 メディエータパターンを実装して、これらのすべてを可能にし、プロジェクトを本当に拡張可能にする簡単で効果的な方法で実装します。

関連する問題