我正在编写一个PHP应用程序,并希望为我的业务逻辑的核心部分实现Mediator模式。这个“核心”实际上是某种带有很多事件和状态的游戏。所以事件驱动处理似乎是最佳方法。
介体模式本身没问题。我只需要创建一个EventDispatcher
并附加一些Listener
。
(实际上,在我的具体情况下,它有点复杂:Listener
需要实现类似Chain-of-responsibility或State模式的东西,以便处理同一事件根据当前的过程状态以不同的方式。)
问题是,事件的处理可能会改变进程的状态并导致进一步的事件。这意味着,侦听器应该能够触发事件。这意味着:
EventDispatcher
。因此EventDispatcher
需要通过构造函数注入或传递给通知(notify(string $eventName, Event $event, EventDispatcher $eventDispatcher)
)方法。new MyEvent(...)
语句,代码将变得更难以测试。两者都有一股腐烂的气味......
当EventListener
触发事件时,如何解决这个难题并让代码清理?