Symfony2中监听器的命名

时间:2012-11-05 17:58:21

标签: php events symfony listener

我已经阅读了一些关于Symfonys事件系统的指南/教程。但我仍然不确定命名最佳实践。不幸的是,大多数文档都使用登录等默认方案。所以这是游戏中的一个例子:

命令评估某种匹配结果。它会触发这样的适当事件:

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

现在我想注册几个听众来处理这个事件,比如一个用于将其发布到获胜者的Facebook页面,另一个用于为获胜者预订成就。在示例中,我发现处理登录事件的侦听器主要称为LoginListener,但是这个名称不应该与它的实际使用有关,而不是它与之相关的事件?因为现在在我的例子中我需要一个MatchWonListener,但是它应该包含Facebook和成就逻辑吗?这会使事件系统变得无用......那么FacebookListener一个onMatchWon($event)和一个AchievementListener使用它自己的onMatchWon($event)方法会不会更好?这样也可以轻松地将更多与Facebook相关的事件添加到FacebookListener中。

我对样本中的命名感到困惑,现在还不确定。我完全错了吗?

1 个答案:

答案 0 :(得分:2)

关于如何命名事件没有“最佳实践”。但是,如果你在事件发生后命名听众,我认为这完全违背了事件的目的。我们的目标是让您的系统的不同部分能够相互交互,而不会产生耦合和混合问题。

因此,考虑到你创建事件来分离关注点,为什么要将所有不同的逻辑混合到一个监听器中?在这种情况下,您也可以直接调用而不是调度事件。

我个人反对像“onMatchWon”这样的名字,因为这并没有描述该方法的作用。假设你想听一场比赛获胜赛事并更新赢得比赛的用户的成就。我可能有一些用户管理器服务或方法updateAchievements(MatchWonEvent $event)的排序。但我认为,如果你愿意的话,这更多的是品味或惯例。

相关问题