domingo, 24 de mayo de 2009

Uso de Symfony en Sinergics.com

Alguno de nuestros colaboradores me ha preguntado qué es eso de Symfony que aparece en el pie de nuestra web.


Symfony es un framework para la creación de aplicaciones Web que conocí hace unos 4 meses aproximadamente. Llevo programando en Java desde hace más de 7 años y el hosting disponible de esta tecnología es escaso y bastante caro. Esto, añadido a que en la universidad el alojamiento en sus servidores sólo permite PHP me hizo formarme en este lenguaje hace varios años.

Quizás por los vicios a los que te acostumbra Java busqué IDEs y frameworks para que formaran parte de mi batería de utilidades. Después de programar "a pelo" durante estos años y tras comparar todo lo que vi disponible elegí Eclipse y Symfony como mis herramientas de trabajo.

De Eclipse espero hablar en sucesivos posts porque es de las cosas más grandes que ha creado la informática en los últimos tiempos. A modo resumen diría que es una plataforma para la creación de entornos de desarrollo. El más conocido es el plugin de Java para poder trabajar con este lenguaje pero otros lenguajes como C, C++ y PHP son soportados con sus plugins correspondientes. El plugin de PHP utilizado es PDT.

Symfony, como he dicho anteriormente, es un framework para la creación de aplicaciones web. Es una implementación desde mi punto de visto muy acertada del patrón MVC (Modelo Vista Controlador).

Empezamos por el modelo. Para trabajar con bases de datos utiliza los ORM (Object-Relationship Mapping) Propel o Doctrine. Estos frameworks sirven de puente entre el mundo de la orientación a objetos y las bases de datos relacionales. Permiten mapear clases con tablas de la base de datos y por consiguiente instancias de estas clases (objetos) con registros de las tablas.
Evitan mucho del famoso glue-code al permitir definir la estructura de una base de datos en unos ficheros de configuración (por ejemplo xml) y autogenerar los sql para crear la base de datos. También crear los ficheros PHP que representan cada una de las clases del modelo con sus correspondientes métodos save, update... Esto, junto con el API de Criteria para hacer las búsquedas da una flexibilidad enorme para trabajar con la base de datos.

Cada página de la aplicación se separa en dos partes básiscamente: acción y plantilla. La acción es el código php que se invoca cuando se llama a la página y es la responsable de acceder al modelo y dar el resultado a pintar a la vista que sería la plantilla. Por lo tanto la acción es el controlador del MVC. De esta forma tienes el controlador perfectamente localizado dentro de un proyecto Symfony.

En cuanto a la vista Symfony ofrece un mecanismo de layout (o master-pages) muy potente. Puedes definir una página de plantilla con la cabecera y el pie y especificar el lugar donde se pintará el contenido de cada una de las páginas de las que constará la aplicación web. Estos layouts no son para nada estrictos. Mediante el uso de slots puedes definir sitios dentro del código donde las páginas pueden insertar código (muy útil si por ejemplo quieres cambiar el title en alguna de las páginas). Un paso más de flexibilidad está en el uso de componentes pero no viene al caso en esta entrada.

Otro de los módulos que ofrece Symfony y que me parece muy interesante es el de routing. De forma declarativa te permite definir las páginas de las que consta la web, qué parámetros acepta, cuál es la url,... Cada una de las páginas tiene un identificador unívoco que puede ser utilizado desde las propias páginas para referenciarlas sin conocer su URL. Esto permite modificar las urls de las páginas de forma sencilla. Esto es una gran ventaja para trabajar con SEO..

Otra de las características que más agradezco a Symfony es la capacidad de crear distintos entornos de aplicación. Después de trabajar en proyectos en La Caixa y Caja Navarra donde en un aplicativo nos podíamos encontrar con hasta cuatro entornos de desarrollo distintos (test, integración, preproducción y producción) es una funcionalidad que busco en todas las herramientas. Symfony te permite configurar la aplicación de forma distinta dependiendo de en qué entorno te encuentras y utilizar uno u otro sólo invocando una url de inicio distinta. En el caso de la web de Sinergics tengo definidos dos entornos, uno de test, para hacer pruebas en local, y otro de producción, que es donde está alojada la web. Cada entorno trabaja con una base de datos distinta. A lo hora de mostrar los errores también la configuración es distinta, en local se obtiene un stacktrace mientras que en remoto sólo te muestra que ha habido un error,... Los logs también son distintos, el uso de la caché es completamente diferente. Es un mecanismo realmente potente.

Otra de las herramientas más interesantes de Symfony es el generador de formularios. Dada la estructura de la base de datos crea los CRUDs (Create-Replace-Update-Delete) para cada una de las tablas. Estos CRUD son luego fácilmente configurables por lo que ahorran mucho tiempo en el desarrollo del backend de una aplicación.

Espero encontrar el tiempo para explicar con más detalle lo que es Symfony en sucesivos posts.

Sólo dar las gracias a todo el equipo de Symfony y especialmente a Fabien por este magnífico framework.

Hasta ahora!

No hay comentarios:

Publicar un comentario