2011-04-30 16 views
7

Estoy buscando una referencia de una buena implementación de arquitectura basada en eventos basada en Zend Framework. ¿Podría compartir su experiencia en este tema?Eventos en la aplicación Zend Framework

he encontrado dos soluciones, pero no los he utilizado todavía:

Editar:

Ejemplo:

Respuesta

4

no tengo mucha experiencia práctica en este tema, pero ya que nadie más parece estar respondiendo, supongo que voy a compartir lo que pienso de esto ...

Esto es quizás algo complicado en las aplicaciones de PHP, ya que normalmente solo se ejecutan mientras dure una solicitud, por lo que la ventaja de poder suscribirse y escuchar eventos genéricos durante esa breve fase puede no ser muy grande.

Sin embargo, creo que puede haber algunos beneficios al permitirle desacoplar más su código.

Por lo que puedo decir, el despachador de Symfony se ve mejor, principalmente porque parece más simple.

He usado una especie de sistema de tipo dojo pubsub: básicamente tienes un editor de eventos, al que las clases pueden publicar eventos. Este es un tipo de gestión de eventos globales, donde no se suscribe específicamente a la clase en sí, sino que se suscribe a un evento específico y no importa qué clase publique el evento.

Los beneficios de esto contra suscribirse a una clase específica es que el código está desacoplado más: en mi caso, es una aplicación ZF, y las clases que se suscriben a eventos simplemente pueden hacerlo en el arranque, frente a tener que hacer suscripciones en los controladores (o dondequiera que se creen los editores)

La desventaja de este enfoque es que puede hacer que las dependencias entre las cosas sean más difíciles de rastrear. Por ejemplo, solo ve una convocatoria de publicación de evento, pero no tiene idea de qué tipo de cosas la escuchan sin profundizar más en el código.

En mi caso, realmente no sé si la aplicación se beneficia del uso de esta arquitectura; de hecho, varias veces he considerado eliminarla por completo y simplemente usar los objetos que escuchan los eventos directamente.