7

Observer パターンをアプリに実装しようとしています (php ではなく、Symfony のコンポーネントを使用しない理由です)。

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

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

4

1 に答える 1

8

私の意見では、symfony2 はカップリングよりも凝集性を優先し、それがこのパターン (メディエーター パターン) を使用する理由です。

Symfony のドキュメントから:

オブジェクト指向のコードは、コードの拡張性を確保するために長い道のりを歩んできました。責任が明確に定義されたクラスを作成することで、コードがより柔軟になり、開発者はサブクラスを使用してクラスを拡張し、動作を変更できます。しかし、独自のサブクラスを作成した他の開発者と変更を共有したい場合、コードの継承はもはや答えではありません。

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

Symfony2 Event Dispatcher コンポーネントは、これらすべてを可能にし、プロジェクトを真に拡張可能にするために、シンプルかつ効果的な方法で Mediator パターンを実装します。

于 2013-10-24T18:30:23.250 に答える