1

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

中介者模式本身没有问题。我只需要创建一个EventDispatcher并附加一些Listeners 到它。

(实际上在我的具体情况下它有点复杂:Listeners 需要实现类似责任链状态模式的东西,以便根据流程的当前状态以不同的方式处理相同的事件。)

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

  1. 他们需要知道EventDispatcher. 所以EventDispatcher需要要么通过构造函数注入,要么传递给 notification( notify(string $eventName, Event $event, EventDispatcher $eventDispatcher)) 方法。
  2. 每个听众都需要了解它触发的所有事件的细节。注入它们将不是一个切实可行的解决方案。所以我们会new MyEvent(...)在监听器中得到很多语句,代码会变得更难测试。

对我来说,两者都有腐烂的气味......

如何解决这个困境,让代码干净,when EventListeners 触发事件?

4

0 回答 0