miércoles, 2 de abril de 2008

Cairngorm V: Eventos

El concepto de EventDispatcher y de listener (quizás también pudiéramos incluir el de evento) están tomados del patrón Observer. Estos conceptos escapan un poco al enfoque de este manual pero se puede encontrar más información en livedocs o en wikipedia.

Una de las primeras necesidades que aparece al empezar a trabajar con eventos es parametrizar las invocaciones de los Commands. Para satisfacer esta necesidad se tienen que utilizar custom Events. Concretamente, como hemos visto, el evento a lanzar tiene que ser un CairngormEvent o cualquier otro evento que herede directa o indirectamente de él. Es en estas subclases donde podemos añadir información concreta para una determinada familia de invocaciones o casos de usos.


Pongamos por ejemplo los siguientes casos de uso:

  • Dado un objeto complejo PersonVO almacenar los datos en un sistema de persitencia (BBDD, fichero, etc) (Create de datos)
  • Dado un objeto complejo PersonVO guardar los cambios en el registro (Update de datos).
  • Dado un objeto complejo PersonVO elminarlo de la capa de persistencia (Delete de datos)
  • Dado un objeto complejo PersonVO sumar un año al campo edad.

Todos estos casos de uso coinciden en que usan objetos PersonVO (encapsulan un objeto PersonVO en la petición), pero efectúan distintas operaciones sobre él (lo discrimina el atributo type del evento). Estas acciones las mapearemos en tres Commands distintos y crearemos un evento PersonEvent que herede de CairngormEvent que añada una propiedad person.

La forma en que lo usaríamos:

Lo cual nos obligaría a tener declarado en el FrontController un command con key NEW_PERSON:

De una forma un tanto brusca, podríamos llegar a decir que lo único que estamos haciendo, en el caso de Cairngorm, cuando lanzamos un evento es ejecutar el método execute de un determinado Command, al cual le llega como parámetro el evento lanzado. Tal como decíamos antes esta sistemática tiene más implicaciones, y es que la invocación del método execute es reproducible/repetible a posteriori simplemente almacenando el evento que ha originado la ejecución. Por otro lado garantiza que los Commands sean totalmente ortogonales al resto del aplicativo y que no tengan dependencia con información contextual superflua o fácilmente accesible y referenciable. Dicho de otra forma, los commands son independientes y no tienen grandes dependencias con el resto del aplicativo, lo cual permite su reutilización en contextos totalmente diferentes al pensado inicialmente.


Fte: http://www.madeinflex.com/2006/11/15/cairngorm-v-eventos/

No hay comentarios:

Publicar un comentario