RSS

Llevando PHP a estándares empresariales: Arquitectura Zend Framework

This entry was posted on Feb 01 2010

Zend Framework, es uno de los más versátiles frameworks para desarrollo en PHP. Conocidas son las intenciones (1,2) para convertir a PHP en un lenguaje que permita el desarrollo de aplicaciones de nivel empresarial, y esa es la razón del surguimiento de varios frameworks como Symfony, CakePHP, Prado y el mismo Zend. Hace un par de años comencé la búsqueda de herramientas en PHP que permitieran desarrollar aplicaciones a nivel empresarial, al estilo JEE, es decir así, un framework donde existiera una clara intención de aplicar patrones de diseño, soporte para transacciones, logging, y se pudiera desarrollar objetualmente. Después de investigar un poco, recopilando opiniones de desarrolladores y mis propios tests finalmente elegí Zend Framework. Por qué? Primero, porque es desarrollada por la empresa que se encuentra detrás del desarrollo de PHP, segundo, porque es soportada por empresas como Google e IBM, y por último y más importante porque es factible fácilmente desacoplarse de la arquitectura básica de Zend, para crear mi propia arquitectura, más acorde a las prácticas que estoy acostumbrado,

En esta imagen puedes ver mi propia interpretación de la arquitectura básica de una aplicación desarrollada en Zend.

Básicamente, la arquitectura de una aplicación desarrollada en Zend está formada por 3 capas, Persistencia, Dominio/Neogocio, y Capa de presentación.

Para el acceso a datos se utiliza el patrón Table Data Gateway. Básicamente lo que hace este patrón es ocupar un objeto como una puerta de enlace a una tabla de la base de datos, en donde una instancia obtiene todas las filas de la tabla. A estas instancias/objetos Zend los denomina model, y pretenden representar el dominio de la aplicación, aunque en estricto rigor representan las tablas de la base de datos y sus relaciones. La ventaja de este patrón es que permite que el acceso a los datos con las operaciones básicas CRUD sea muy simple de realizar, por lo tanto es factible desarrollar aplicaciones simples rápidamente.

Por último existe una implementación del patrón MVC, en donde los Controllers se comunican con las clases Model para obtener datos e implementar lógica de negocios.  La decisión de colocar la lógica de negocio en las clases model, fue arbitraria. Algunos prefieren la lógica en los controladores, es común encontrar en la documentación ejemplos con estas características.

Observaciones

La arquitectura actual de Zend es útil, es decir se pueden construir aplicaciones robustas con este framework, pero presenta algunas falencias conceptuales.  Las clases denominadas model, no representan fehacientemente objetos del modelo de dominio, de hecho al hacer debugging sobre una de estas clases, podrás observar que existen muchos datos ajenos al negocio, incluso exponiendo el nombre de usuario de la conexión a la base de datos.  Eso agrega un poco de basura, cuando lo que uno busca es la simplicidad de un POJO en nuestro domonio. En PHP sería algo como POPO (Plain Old PHP Object). Desde mi punto de vista esta es la principal falencia, ya que dificulta el desacoplamiento de capas, aislar el acceso a datos completamente del negocio y el trabajo en equipos numerosos. Pero como mencioné anteriormente es posible realizar tu propio framework basado en Zend, aplicando con toda libertad cualquier patrón o concepto.

Más adelante voy a exponer mi propia arquitectura sobre Zend Framework que utilizo para mis proyectos, basada en Spring, en la cual se agregan más capas, pero con la intención de no perder la capacidad de desarrollar aplicaciones web ágilmente.


One Response to “Llevando PHP a estándares empresariales: Arquitectura Zend Framework”

  1. Interesante tu articulo sobre este framework. Yo estoy usando CakePHP que lo encuentro muyptractico al momento de agilidad en programación peor con la falencia que es muy pesado en la ejecución debido a la cantidad de librerias que carga.
    Codeigniter me parece la contra cara de CakePHP ya que el rendimeinto es muy bueno y esta muy cercano al PHP nativo.
    Realmente tanbién me seduce la idea de hacer un propio framework como lo expones en este articulo con Zend.
    Probaremos que tal.
    http://twitter.com/crisanch

    Saludos


Post a Comment