我已经阅读了一些关于Symfonys事件系统的指南/教程。但我仍然不确定命名最佳实践。不幸的是,大多数文档都使用登录等默认方案。所以这是游戏中的一个例子:
命令评估某种匹配结果。它会触发这样的适当事件:
$dispatcher->dispatch('game_bundle.match_won', new MatchWonEvent($match, $winner));
现在我想注册几个听众来处理这个事件,比如一个用于将其发布到获胜者的Facebook页面,另一个用于为获胜者预订成就。在示例中,我发现处理登录事件的侦听器主要称为LoginListener
,但是这个名称不应该与它的实际使用有关,而不是它与之相关的事件?因为现在在我的例子中我需要一个MatchWonListener
,但是它应该包含Facebook和成就逻辑吗?这会使事件系统变得无用......那么FacebookListener
一个onMatchWon($event)
和一个AchievementListener
使用它自己的onMatchWon($event)
方法会不会更好?这样也可以轻松地将更多与Facebook相关的事件添加到FacebookListener
中。
我对样本中的命名感到困惑,现在还不确定。我完全错了吗?
答案 0 :(得分:2)
关于如何命名事件没有“最佳实践”。但是,如果你在事件发生后命名听众,我认为这完全违背了事件的目的。我们的目标是让您的系统的不同部分能够相互交互,而不会产生耦合和混合问题。
因此,考虑到你创建事件来分离关注点,为什么要将所有不同的逻辑混合到一个监听器中?在这种情况下,您也可以直接调用而不是调度事件。
我个人反对像“onMatchWon”这样的名字,因为这并没有描述该方法的作用。假设你想听一场比赛获胜赛事并更新赢得比赛的用户的成就。我可能有一些用户管理器服务或方法updateAchievements(MatchWonEvent $event)
的排序。但我认为,如果你愿意的话,这更多的是品味或惯例。