19 de abril de 2008

CakePHP, Symfony y Zend


Siempre me preguntan porque cakephp, y creo que esto lo confirma una vez mas, aunque fui tentado por Symfony!! lamento haber ya avanzado por cakephp! pero ahi estamos bien!!.

Este articulo me parece bueno y detalladado, lo extraje de aqui, para lectura y aclaración de las dudas (soy malo explicando) .


PHP es un lenguaje orientado específicamente al desarrollo de aplicaciones web ampliamente difundido debido a su facilidad de aprendizaje, el soporte de una importante comunidad de programadores, la abundante documentación y su libertad de uso. En este lenguaje encontramos una multitud de frameworks, estructuras de software que ayudan a la contrucción de aplicaciones, de la cual la mayoría están basados en el patrón Modelo Vista Controlador (MVC: Model-View-Controller). En el presente artículo se abordarán las características de tres de ellos, que comparten este enfoque de diseño.

CakePHP

CakePHP [http://www.cakephp.org/ ] es un framework de desarrollo rápido de aplicaciones de código abierto en PHP. Inspirado en Rails, un framework para la construcción de sitios web que utilizan una base de datos como fuente de recursos, posee una infraestructura que tiene como finalidad permitir el desarrollo de aplicaciones web de manera ágil y estructurada, sin perder flexibilidad.

Entre las características más destacables de CakePHP se incluyen:

- Arquitectura basada en el patrón Modelo Vista Controlador (MVC) y orientada a objetos: define clases modelo, vista y controlador con funcionalidades básicas y de las cuales heredan todas las clases que se ajustan a este patrón y que son usadas en la aplicación construida con el framework.
- Una comunidad activa de usuarios: creada tras la publicación del framework en 2005 y que ha contribuido a mejorar el framework (a través de subproyectos específicos en CakeForge.Org) y difundir su uso.
- Licencia flexible: es distribuido bajo la licencia X11, más conocida entre los desarrolladores de software como MIT License.
- Compatible con PHP4 y PHP5: aunque en PHP4 se requiere especificar algunos parámetros de configuración adicionales en las clases a implementar.
- Operaciones básicas en base de datos (Creación, Obtención, Actualización y Borrado): estas operaciones están integradas para interacción con la base de datos y la simplificación de consultas.
- Estructura de aplicaciones (Application Scaffolding): permite al programador hacer uso de un conjunto de convenciones aplicables a la estructura de la base de datos de la aplicación y el framework se encarga de generar el código para la interacción a lo largo de todas las capas de la aplicación.
- Despachador de peticiones: permite acceder a la aplicación a través de URLs amigables y configurables.
- Incorporación de validaciones a lo largo del framework.
- Generación de plantillas de manera rápida y flexible: usando la sintaxis de PHP y con asistentes o helpers.
- Incorporación de asistentes de construcción de vistas: para la automatización de la generación de código en AJAX (Asynchronous JavaScript and XML), JavaScript, formularios HTML, entre otros.
- Componentes de seguridad, manejo de sesiones y de peticiones: que reúnen las mejoras prácticas estandarizadas por la industria del software.
- Listas de control de acceso flexibles: para gestionar el ingreso de usuarios a la aplicación construida con el framework.
- Verificación de ingreso de datos permitidos (Data Sanitization): permite determinar qué datos pueden ser ingresados y darle el formato adecuado a aquellos que no cumplen las reglas de validación.
- Almacenamiento en caché de las vistas: para acelerar la descarga de las páginas web.
- Trabaja en cualquier subdirectorio de un servidor web: requiere poca o nula configuración del servidor Apache donde se instalará.

El framework surge como un proyecto personal de Michal Tatarynowicz y a agosto de 2007 existe una versión estable (1.1.16.5612) y una versión de desarrollo (1.2.0.5427alpha).

Symfony

Symfony [http://www.symfony-project.com/ ] es un framework diseñado para optimizar el desarrollo de aplicaciones web a través de diversas características clave. Separa las reglas de negocio de la aplicación, la lógica del servidor y las vistas de presentación. Contiene una gran variedad de herramientas y clases para conseguir acortar el tiempo de desarrollo de aplicaciones web complejas. Adicionalmente, automatiza tareas comunes para que el programador pueda enfocarse por completo en las especificaciones.

Entre las características generales del framework podemos citar:

- Fácil de instalar y configurar: ha sido probado con éxito en plataformas Windows y derivadas de Unix.
- Independiente del manejador de base de datos: utiliza Propel, una capa de abstracción que le permite interactuar con varias bases de datos.
- Simple de usar: y al mismo tiempo lo suficientemente flexible para adaptarse a escenarios complejos.
- Basado en la premisa de "convención sobre configuración": el desarrollador sólo necesita configurar aquellos aspectos sobre los cuales no hay una tendencia definida.
- Cumple con la mayoría de las mejores prácticas en diseño web y patrones de diseño.
- Utilizable en entornos empresariales: puede adaptarse a políticas y arquitecturas ya existentes en tecnologías de información, y es lo suficientemente estable para proyectos de largo plazo.
- Código legible: con comentarios en phpDocumentor para su fácil mantenimiento.
- Fácil de extender: permitiendo la integración con otras librerías.
- Incorpora herramientas que facilitan la prueba y depuración de aplicaciones: como unidades de generación de código, pruebas del funcionamiento del framework, panel de depuración, interfaz por línea de comandos y configuración en tiempo real.

Adicionalmente, pueden señalarse otro grupo de características que permiten la automatización de ciertas tareas relacionadas con la construcción de aplicaciones web, como las siguientes:

- Incorpora una capa de internacionalización: que posibilita la traducción de datos e interfaces, así como la localización de contenido en función de la ubicación geográfica del usuario.
- Uso de plantillas: las cuales pueden ser elaboradas por diseñadores de páginas web que desconocen el resto de detalles técnicos del framework.
- Asistentes de vistas: que reducen la cantidad de código de presentación al escribir grandes bloques de código con simples llamadas a funciones.
- Validación y regeneración automática de formularios: lo que asegura una buena calidad de los datos en la base de datos y una mejor experiencia de usuario.
- Verificación de la salida enviada por la aplicación: que ofrece una protección frente a ataques por datos corruptos.
- Manejo de memoria caché: lo cual reduce el uso del ancho de banda y la carga en servidor.
- Mecanismos de autentificación y credenciales: que facilitan la creación de secciones restringidas y la gestión de seguridad de usuarios.
- URLs inteligentes: que permiten que las direcciones de las páginas web sean parte de la interfaz y resulten amigables a los motores de búsqueda.
- Una gestión de listas más amigables al usuario: gracias a la paginación automática, ordenamiento y filtrado de resultados.
- Las interacciones usando AJAX son fáciles de implementar gracias a los asistentes de una sola línea de código que encapsulan efectos en JavaScript compatibles con varios navegadores.

Symfony, al igual que CakePHP, se originó a partir de un proyecto personal. Su primer desarrollador fue Fabien Potencier y la primera versión fue publicada en el año 2005. A agosto de 2007 existe una versión estable (1.0.6), aunque ya se comenzó a recibir sugerencias para la versión 2.0.

Zend Framework

Zend Framework [http://framework.zend.com/ ] destaca el hecho de que no sólo busca facilitar la programación a través del patrón MVC, sino también automatizar tareas más específicas, como el acceso a base de datos, el filtrado de datos ingresados a la aplicación o la búsqueda en un sitio web ordenando resultados por relevancia.

Entre sus metas se encuentran:

- Proveer un repositorio de componentes de alta calidad y que cuenten con soporte activo.
- Proveer un sistema completo para el desarrollo de aplicaciones web elaboradas en PHP5.
- Facilitar el aprendizaje en el uso del framework sin tener que aprender un nuevo lenguaje de programación.
- Organizar la colaboración de la comunidad para una programación avanzada en PHP5.

Los componentes con los que cuenta este framework pueden ser agrupados en las siguientes categorías:

- Infraestructura del núcleo del framework: componentes requeridos por otros bloques del framework, como memoria caché, configuración del ambiente de trabajo, operación por línea de comandos, registro de actividades y gestión de memoria, entre otros.
- Autentificación y autorización de acceso: responsables de la configuración de listas de control de acceso, autentificación de usuarios y manejo de sesiones.
- Base de datos: clases de acceso, modificación de tablas, obtención de datos mediante consultas SQL y lectura en formato XML.
- Internacionalización y Localización: para configurar la fecha y hora, la ubicación geográfica que tomará como base la aplicación web, las unidades de medida a usar y la posibilidad de traducir la información a otros idiomas.
- Emails, formatos y búsquedas: generación de archivos PDF, mensajes de correo electrónico en formato de texto y MIME (Multi-Purpose Internet Mail Extensions, Extensiones de correo Internet multipropósito)
- Modelo-Vista-Controlador: centra su atención en el desarrollo de controladores genéricos y específicos: de acciones, de atención de peticiones, de generación de URLs; además de una clase para las vistas.
- Web y Servicios Web: permite que la aplicación web pueda hacer uso de servicios web ofrecidos por aplicaciones externas y exponga servicios web propios.
- Documentación: intenta facilitar la lectura del código fuente, brindar ejemplos de su uso, promover equipos de traducción de la documentación y elaborar un tutorial del desarrollo de una aplicación web.

Zend Framework, a diferencia de los otros entornos de desarrollo presentados previamente, es un intento dirigido por la compañía responsable del desarrollo del lenguaje PHP, Zend Technologies Ltd, y mantenido por una comunidad de voluntarios. A pesar de ello, a la fecha aún no consigue niveles de eficacia y adopción similares a los frameworks en PHP ya existentes. A agosto de 2007 su última versión recibe la denominación de Zend Framework 1.0.1 y se espera el lanzamiento de la versión 1.1.0 en septiembre del mismo año.

Cuadro Comparativo de frameworks en PHP

Características

Cake PHP

Symfony

Zend FW

Arquitectura de aplicaciones

Incorporación del patrón Modelo Vista Controlador orientado a objetos.

X

X

X

Operaciones CRUD (Create, Retrieve, Update y Delete) asociadas a patrón Active Record.

X

X


Mapeado de objetos a bases de datos relacionales (ORM).

X

X

Independiente del manejador de base de datos.

X

X

X

Estructura por defecto para aplicaciones (scaffolding).

X

X

Archivos de configuración de la aplicación.

.php

.yml*

.php

Acceso vía web

Despachador de peticiones HTTP.

X

X

X

Generación de URLs amigables.

X

X

X

Implementación de código HTML

Uso de plantillas en PHP.

X

X

X

Posibilidad de uso de plantillas en Smarty.

X

X

Implementación de ayudantes de plantillas (helpers).

X

X

Seguridad

Manejo propio de sesiones por usuarios.

X

X

X

Manejo de privilegios de acceso a secciones de la aplicación (Access Control List).

X

X

Verificación de la salida generada en HTML por procesamiento de peticiones (Data Sanitization).

X

X

Usabilidad y acceso rápido

Almacenamiento en caché de las vistas.

X

X


Almacenamiento en caché de configuración de las aplicaciones.

X


Documentación para su uso

Manual de referencia.

X

X

X

Documentación de la Interfaz de Programación de Aplicaciones (API).

X

X

X

Herramientas de programación

Generación de código PHP.

X

X

Herramientas de prueba y depuración.

X

X

Interfaz de línea de comandos para la creación y mantenimiento de aplicaciones.

X

X

Almacenamiento de logs de funcionamiento del framework.

X


Extensibilidad y opciones adicionales

Integración con otras herramientas a través de plugins.

X

X


Implementación propia de llamadas Asyncronous JavaScript and XML (AJAX)

X

X


Soporte para Web Services.

X

Soporte para envío de correo electrónico.

X

X

Generación de contenido sindicalizado (RSS).

X

X

Generación de archivos PDF.

X

X

X

Soporte para internacionalización y localización de contenidos.

X

X

Soporte PHP

Soporte para PHP4.

X

Soporte para PHP5.

X

X

X

Características adicionales

Licencias libres.

X11

X11

BSD

Comunidad activa de usuarios.

X

X

X

* YAML: YAML Ain't Markup Language, formato de archivos similar a XML, pero más intituito y legible.

Literatura de Referencia

[AND2006] ANDERSON, John y Larry E MASTERS. CakePHP: A Rapid Development Framework. CakePHP Programmer's Reference Guide . Cake Software Foundation Inc. En: CakeForge.

[CHA2006] CHASE, Nicholas. Understanding the Zend Framework, Part 1: The basics . En: developerWorks: IBM's resource for developers (27 Jun 2006).

[POT2007] POTENCIER, Fabien y François ZANINOTTO. The Definitive Guide to symfony . Apress, 2007. ISBN: 1590597869. Traducción al español disponible en http://www.librosweb.es/symfony/ .

[ZEN2006] ZEND TECHNOLOGIES. Why Zend Framework? . En: Zend Framework: Roadmap.

[ALA2007] ALAMOS, Roberto. Top 13 reasons to use a web framework and never look back. En: CoderBattery: Enpowering Developers.

Actualización

En IBM developerWorks se ha iniciado una serie de cinco artículos sobre frameworks en PHP enfocada en Zend Framework, Symfony y CakePHP:

IBM developerWorks
PHP Frameworks, Part 1

1 comentarios:

Anónimo dijo...

Symfony have ACL (auth & credentials):

http://www.symfony-project.org/book/1_0/06-Inside-the-Controller-Layer#Action%20Security