2012-11-05 44 views
5

我讀過一些關於Symfonys事件系統的指南/教程。但我仍不確定命名的最佳做法。不幸的是,大多數文件使用默認情況下,如登錄等。所以這裏是一個遊戲的例子:Symfony2中的聽衆的命名

命令評估某種匹配結果。它觸發一個相應的事件是這樣的:

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

現在我要註冊多個偵聽器來處理這個事件,例如像一個張貼這對獲獎者的Facebook頁面,另一個預訂爲勝利者的成就。在示例中,我發現處理登錄事件的偵聽器主要被稱爲類似LoginListener的東西,但是不應該將此名稱與其實際使用相關而不是與其相關的事件相關嗎?因爲現在在我的例子中,我需要一個MatchWonListener,但是它應該包含Facebook和成就邏輯嗎?這將使事件系統無用......那麼有FacebookListeneronMatchWon($event)和一個AchievementListener與它自己的onMatchWon($event)方法不是更好嗎?例如,這也可以很容易地將更多Facebook相關事件添加到FacebookListener中。

我對樣品中的命名感到困惑,並且對現在還不確定。我完全錯了嗎?

回答

2

關於如何命名事件沒有「最佳做法」。但是,如果您在事件發生後給您指定了聽衆,我認爲完全顛覆了事件的目的。目標是讓系統的不同部分能夠相互交互,而不會出現耦合和混合問題。

所以考慮到你爲了分離問題而創建了很多事件,爲什麼要把所有不同的邏輯混合到一個監聽器中呢?在這種情況下,你可能只是直接打電話而不是派遣一個事件。

我個人反對像「onMatchWon」這樣的名字,因爲它沒有描述該方法的功能。假設您想收聽比賽獲勝事件並更新獲勝的用戶的成就。我可能會有一些用戶管理器服務或用方法updateAchievements(MatchWonEvent $event)排序。但是,如果你願意,我認爲這更多的是品味或者慣例。

+0

我想在它的通用目的('FacebookListener','AchievementListener')以及事件'onMatchWon'上調用的實際方法之後命名偵聽器類。因爲這不會使任何東西耦合(仍然可以很容易地用全新的Listener擴展)。最大的好處仍然是,在事件發送時,不需要在方法中進行大量的直接調用,反之,我不會知道如何調用監聽器,因爲多個監聽器(關於成就,臉譜,...)將被稱爲'MatchWonListener'然後 –

+0

不,我沒有暗示,這正是我試圖阻止人們做的事情。我說沒有約定,但是有一個'MatchWonListener'看起來很愚蠢,我認爲你想「做」的事情是好的,我不喜歡將類命名爲「聽衆」,因爲這意味着他們知道他們什麼時候「重新被稱爲,我儘量避免,但總的來說並不可怕,正如我所說的,更多的是品味的問題。 – fd8s0

+0

好的!所以我一點也沒有錯; ;-)非常感謝! –