Symfony2 中监听器的命名
Posted
技术标签:
【中文标题】Symfony2 中监听器的命名【英文标题】:Naming of Listeners in Symfony2 【发布时间】:2012-10-25 14:50:22 【问题描述】:我已经阅读了一些关于 Symfonys 事件系统的指南/教程。但我仍然不确定命名最佳实践。不幸的是,大多数文档都使用默认场景,如登录等。所以这里有一个游戏的例子:
一个命令评估某种匹配结果。它会触发这样的适当事件:
$dispatcher->dispatch('game_bundle.match_won', new MatchWonEvent($match, $winner));
现在我想注册几个听众来处理这个事件,例如一个用于将其发布到获胜者的 Facebook 页面,另一个用于为获胜者预订成就。在示例中,我发现处理登录事件的侦听器主要被称为LoginListener
,但这个名称不应该与它的实际使用相关,而不是与它相关的事件吗?因为现在在我的示例中,我需要一个MatchWonListener
,但它是否应该同时包含 Facebook 和成就逻辑?那将使事件系统变得无用......不是更好吗?有一个FacebookListener
和一个onMatchWon($event)
和一个AchievementListener
有它自己的onMatchWon($event)
方法?例如,这也便于将更多与 Facebook 相关的事件添加到 FacebookListener
。
我对示例中的命名感到困惑,现在不确定。我完全错了吗?
【问题讨论】:
【参考方案1】:没有关于如何命名事件的“最佳做法”。但是,如果您在事件之后命名侦听器,我认为这完全违背了事件的目的。目标是能够让系统的不同部分相互交互,而无需担心耦合和混合问题。
所以考虑到您已经走到了创建事件来分离关注点的地步,为什么要将所有不同的逻辑混合到一个侦听器中?在这种情况下,您最好直接调用而不是调度事件。
我个人反对“onMatchWon”之类的名称,因为它没有描述该方法的作用。假设您想收听比赛获胜事件并更新获胜用户的成就。我可能会有一些用户管理服务或带有updateAchievements(MatchWonEvent $event)
方法的排序。但我认为这更多的是一个品味问题,或者如果你愿意的话。
【讨论】:
我想根据它的一般用途(FacebookListener
、AchievementListener
)和在事件onMatchWon
上调用的实际方法来命名侦听器类。因为那不会耦合任何东西(仍然可以很容易地与全新的侦听器扩展。最大的好处仍然是,如果事件被调度,方法中不需要很多直接调用。相反,就像你建议的那样,我不会知道如何调用监听器,因为多个监听器(关于成就,facebook,...)将被称为 MatchWonListener
。
不,我没有建议这样做,这正是我试图阻止人们这样做的原因。我说没有约定,但是拥有MatchWonListener
似乎很愚蠢。我认为您“想要”做的事情没问题,我不喜欢将类命名为“侦听器”,因为这意味着他们知道何时被调用,我试图避免这种情况,但总而言之并不可怕,正如我所说,更多的是品味问题。以上是关于Symfony2 中监听器的命名的主要内容,如果未能解决你的问题,请参考以下文章