Los Servicios en Zend Framework 2
Por Carlos Nacianceno, @igormx
Zend Framework 2 trae consigo una serie de cambios de arquitectura en comparación con Zend Framework 1, lo que en ZF1 era Singletons, en ZF2 son Eventos; lo que en ZF1 es una estructura MVC rígida en ZF2 tenemos los Módulos.
Estos cambios también han impactado la forma en al que se maneja las librerías que antes sólo eran cargadas o registradas por autoloaders y llamadas en cualquier momento, sin tomar en cuenta requerimientos de instanciación,configuración y más. Ahora en ZF2 tenemos servicios.
¿Qué es un servicio?
Son básicamente librerías, objetos o piezas de funcionalidad que cumple con un propósito concreto como enviar e-mails, loggers, comunicación con bases de datos o servicios concretos. Una de las características que los diferencía es que un servicio debe tener en cuenta la reutilización que un servicio, tanto que podríamos usarla en cualquier proyecto sea ZF2 o no.
La necesidad de crear un servicio se hace patente cuando esa funcionalidad no se puede colocar ni en el modelo ni en el controlador, es decir, no tiene que ver con el proceso MVC de la aplicación.
Estructura básica de un servicio
El servicio básicamente tiene 2 carpetas:
Library que contiene la estructura de directorios con las clases que contienen nuestra funcionalidad, hay que tomar en cuenta que los namespaces de las clases tienen que coincidir con la estructura de directorios a la cual pertenecen.
Tests que contiene los test unitarios (buena práctica) del código funcional, la estructura de directorios y clases en tests debe ser un espejo de lo que hay en library. Además, debe tener un archivo phpunit.xml.dist quien contiene configuraciones para el PHPUnit, un archivo de arranque Bootstrap.php o bootstrap.php que es llamado por PHPUnit para establecer condiciones iniciales de los tests, y por último un archivo para el autoloading, que puede usarse el mecanismo de autoloading de ZF2 u otras herramientas de generación de lo mismo como phpab.
Archivos adicionales del servicio
Si el servicio se va a compartir en Github, se pueden añadir archivos como README, LICENSE,etc.
Si nuestro servicio requiere dependencias puede usarse composer para estleber tales dependencias de una manera más sencilla
Estándares de codificación
Nuestro servicio debe usar estándares de codificación adecuados, el de ZF2 es el siguiente: http://framework.zend.com/wiki/display/ZFDEV2/Coding+Standards.
Documentación
Tenemos que generar documentación adecuada de nuestro servicio, se recomienda ampliamente la generación de la misma a partir de los comentarios en el código con docBlocks y phpDocumentor.
Reutilización y publicación de nuestro servicio
Podemos publicar nuestro servicio en los siguientes sitios
http://packages.zendframework.com
Si alguien instala nuestro servicio usando composer, este será colocado en la carpeta vendor y tendrá que ser cargado y usado a través del Service Manager.
Espero que esta guía les sea útil.