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