如何在EventListener中触发事件?

时间:2018-04-21 22:47:20

标签: php architecture software-design mediator event-dispatching

我正在编写一个PHP应用程序,并希望为我的业务逻辑的核心部分实现Mediator模式。这个“核心”实际上是某种带有很多事件状态的游戏。所以事件驱动处理似乎是最佳方法。

介体模式本身没问题。我只需要创建一个EventDispatcher并附加一些Listener

(实际上,在我的具体情况下,它有点复杂:Listener需要实现类似Chain-of-responsibilityState模式的东西,以便处理同一事件根据当前的过程状态以不同的方式。)

问题是,事件的处理可能会改变进程的状态并导致进一步的事件。这意味着,侦听器应该能够触发事件。这意味着:

  1. 他们需要知道EventDispatcher。因此EventDispatcher需要通过构造函数注入或传递给通知(notify(string $eventName, Event $event, EventDispatcher $eventDispatcher))方法。
  2. 每个听众都需要知道它触发的所有事件的具体细节。注入它们将不是一个切实可行的解决方案。因此,我们将在侦听器中获得大量new MyEvent(...)语句,代码将变得更难以测试。
  3. 两者都有一股腐烂的气味......

    EventListener触发事件时,如何解决这个难题并让代码清理?

0 个答案:

没有答案