2012-11-05 9 views
5

Symfonysイベントシステムについてのガイド/チュートリアルを読んだことがあります。しかし、私はまだ命名のベストプラクティスについてはよく分かりません。不幸にも、ほとんどのドキュメントではログインなどのデフォルトのシナリオが使用されていますので、ゲームの例を示します。Symfony2でのリスナーのネーミング

コマンドは何らかの一致結果を評価します。これは、このような適切なイベントを発生させます:

$dispatcher->dispatch('game_bundle.match_won', new MatchWonEvent($match, $winner)); 

は、今私は、例えば、勝者のFacebookページにこれを掲示用と勝者の達成を予約する別のもののようないくつかのリスナー、このイベントを処理するために、登録したいです。例では、ログインイベントを処理するリスナーは、主にLoginListenerのように呼ばれていましたが、この名前は関連するイベントではなく、実際の使用に関連するものではありませんか?今私の例ではMatchWonListenerが必要ですが、Facebookと成果の両方のロジックが含まれている必要がありますか?そうすれば、イベントシステムは役に立たなくなるでしょう... FacebookListenerにとonMatchWon($event)、それにAchievementListenerとそれ自身のonMatchWon($event)メソッドを持つ方が良いのではないでしょうか?これにより、たとえばFacebook関連のイベントをFacebookListenerに簡単に追加することもできます。

サンプルの名前が混乱していますが、今は分かりません。私はそれが完全に間違っていますか?

答えて

2

イベントに名前を付ける方法には「ベストプラクティス」はありません。しかし、イベントの後にリスナーの名前を付けると、それはイベントの目的を完全に破ると思います。目標は、システムのさまざまな部分を結合したり、混合したりすることなく相互作用させることです。

このように、懸念を分けてイベントを作成するには、これまでに行ったことを考慮して、さまざまなロジックをすべて1つのリスナーに混ぜるのはなぜですか?その場合は、イベントをディスパッチする代わりにダイレクトコールを行うだけです。

「onMatchWon」のような名前は個人的には、そのメソッドが何をしているのかわからないためです。試合に勝利し、勝利したユーザーの業績を更新したいとします。私はおそらく、いくつかのユーザーマネージャーサービスまたはメソッドupdateAchievements(MatchWonEvent $event)で並べ替えがあります。しかし、私はそれがあなたが喜んでいるならば、趣味や慣習の問題であると思っています。

+0

リスナークラスの一般的な目的( 'FacebookListener'、' AchievementListener')とイベント 'onMatchWon'で呼び出される実際のメソッドの名前を付けたいと思っていました。それは何も結びついていないからです(まだ完全に新しいListenersで簡単に拡張できます)。大きな利点は、イベントで派遣されたメソッドの直接呼び出しがたくさんある必要はないということです。 –

+0

いいえ、それはまさに私が人々がやることを妨害しようとしていたことを示唆していませんでした。私はコンベンションはないと言っていましたが、「MatchWonListener」を持っているとかなり馬鹿に思えました。あなたが「したい」と思っていたことは大丈夫です。クラス「リスナー」の名前は好きではありません。私は避けようとしていますが、すべてが恐ろしいことではなく、私が言ったように、味の問題です。 – fd8s0

+0

ああ、私は間違っていませんでした。 ! –

関連する問題