我正在尝试使用 Zend Framework 2 的新 Eventmanager。我确实理解 basic usage .但我不确定如何在实际项目中使用它,或者更确切地说,我不确定代码应该去哪里。
例如: 在 Rob Allen 的介绍中(上面的链接),他在“findById”方法中触发了两个事件。听众的代码应该去哪里?在我看来,将这段代码也放在 PhotoMapper 类中是没有意义的,还是我错了?
最佳答案
我承认我还没有玩过它,但我认为你是对的,监听器代码可能不应该在映射器中。相反,它可以独立于外部类中,因此它可以真正成为一个单一职责对象 - 处理他订阅的事件 - 并且代码可以尽可能保持 DRY。
作为第一步,我们可以定义监听器需要做什么来完成他的工作。他在实例化时知道一些事情,其他事情需要在事件触发时传递。
例如,对于缓存监听器,我可能会在 Bootstrap 中实例化他,并提供有关缓存位置、生命周期等信息。甚至可能会从缓存管理器资源中获取完全配置并准备好使用的缓存实例。这些可以是监听器对象的构造函数参数。
然后,仍然可能在 Bootstrap 中,我会向事件管理器注册此监听器,订阅您的事件并附加您希望在触发事件时运行的方法。当然,该方法签名需要与事件管理器将提供给您的信息兼容。
我想这个想法是这个监听器对象具有以下潜在好处:
单一职责,因此复杂性较低且更易于测试
希望足够通用,以便这个单个监听器可以处理多个事件。
这里有点皱纹。实例化和注册监听器似乎是不合理的性能损失,只是因为某些下游进程可能会触发他订阅的事件。这就是静态监听器的用武之地。同样,注册是在早期完成的(如 Bootstrap),但是直到真正需要时才会实例化监听器。
披露:我可能完全错了。所以如果有人想纠正我,那就太好了。 ;-)
关于php - 如何(或在哪里)使用 Zend Framework 2 的 EventManager?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11016046/