4

我正在尝试使用 Zend Framework 2 的新 Eventmanager。我确实了解基本用法。但我不确定如何在实际项目中使用它,或者更确切地说该代码在哪里。

例如:在 Rob Allen 的介绍中(上面的链接),他在“findById”方法中触发了两个事件。听众的代码应该去哪里?在我看来,将此代码也放在 PhotoMapper 类中是没有意义的,还是我错了?

4

1 回答 1

0

我承认我还没有强烈使用它,但我认为你是对的,监听器代码可能不应该在映射器中。相反,它可以在外部类中独立存在,因此它实际上可以是一个单一职责的对象 - 处理他订阅的事件 - 并且代码可以尽可能保持 DRY。

作为第一步,我们可以定义听众需要做什么来完成他的工作。有些事情他在实例化时就知道,有些事情需要在事件触发时传递。

例如,对于缓存侦听器,我可能会在 Bootstrap 中实例化他,并提供有关缓存位置、生命周期等的信息。甚至可以从缓存管理器资源中获取完全配置并准备好使用的缓存实例。这些可能是侦听器对象的构造函数参数。

然后,仍然可能在 Bootstrap 中,我会向事件管理器注册此侦听器,订阅您的事件并附加您希望在触发事件时运行的方法。当然,该方法签名需要与事件管理器提供给您的信息兼容。

我想这个想法是这个监听器对象具有以下潜在好处:

  1. 单一职责,因此复杂性更低,更容易测试

  2. 希望足够通用,以便这个单个侦听器可以处理多个事件。

这里有一点皱纹。仅仅在某个下游进程可能触发他订阅的事件的情况下实例化和注册一个侦听器似乎对性能造成了不合理的影响。这就是静态监听器的用武之地。同样,注册是提前完成的(就像 Bootstrap 一样),但监听器在真正需要之前不会被实例化。

披露:我可能完全错了。因此,如果有人想理顺我,那就太好了。;-)

于 2012-06-24T05:22:20.493 回答