lunes, 28 de febrero de 2011

¿Symfony 1 o Symfony 2?

En el momento de escribir esta entrada, la última versión publicada de Symfony es la 1.4 (noviembre de 2009). Existe muy extensa documentación y de hecho es con la guía definitiva de la 1.2 con la que he empezado a conocer el producto y a escribir este blog, pero resulta que Symfony 2 está a punto de salir del horno y por lo visto trae  importantes cambios respecto a su predecesor. Entonces surge la pregunta: ¿es mejor empezar a conocer Symfony 1 para luego saltar al 2 o directamente empezar a trabajar con Symfony 2?.

Mi impresión es que vale la pena empezar directamente con Symfony 2. Éste, según el vídeo cuyo enlace pongo a continuación, es más sencillo de manejar, más fácil de aprender, deja atrás muchas cuestiones no del todo eficientes del 1, sustituye los plugins por un nuevo concepto (bundles) y además establece ya como "oficiales" un ORM (Doctrine) y un gestor de versiones (Git).
Aquí también se adelantan algunas características de Symfony 2:
Página oficial de Symfony 2:
Y para empezar con Symfony 2:
  • Quick Tour (es un pequeño manual que empieza desde la instalación y recorre los conceptos básicos)

domingo, 27 de febrero de 2011

Generar YAML para Doctrine utilizando MySQL Workbench

Una de las formas más sencillas de generar YAML para Doctrine y así ver casos reales y concretos, es utilizar MySQL Workbench Doctrine Plugin. Éste nos permite generar YAML desde la famosa herramienta MySQL Workbench (http://wb.mysql.com/a partir de una base de datos MySQL que ya tengamos .

Lógicamente el primer paso es instalar el mencionado plugin. Se puede encontrar en la siguiente página:

http://code.google.com/p/mysql-workbench-doctrine-plugin.

Hay que ir a la pestaña "Download" y descargar un fichero con un nombre del tipo "MySQL-Workbench-Doctrine-Plugin-x.x.x.zip", que contiene el fichero DoctrineExport.grt.lua. Ahora hay que ir a "Tools"->"Install plugin/Module File" del MySQL Workbench y tomar el fichero.

Una vez hecho esto he tenido que reiniciar la aplicación para que me aparecieran en "Plugins"->"Catalog" las dos nuevas opciones "Doctrine Export". Ahora los pasos a seguir son los siguientes:
  • Ir a "Database"->"Reverse Engineer"
  • Mediante el Wizard que aparece seleccionar la base de datos que deseemos y completar el proceso.
  • Una vez nos aparece el diagrama con todas las tablas ir a "Plugins"->"Catalog"->"Doctrine Export".
Y ya tenemos nuestros fichero .yml que podemos visualizar simplemente con, por ejemplo, WordPad .

sábado, 26 de febrero de 2011

¿Propel o Doctrine?

Una de las muchas ventajas de Symfony es que utiliza "Mapeo de Objetos a Base de datos" (ORM). Citando la guía:
Las bases de datos siguen una estructura relacional. PHP 5 y Symfony por el contrario son orientados a objetos. Por este motivo, para acceder a la base de datos como si fuera orientada a objetos, es necesario una interfaz que traduzca la lógica de los objetos a la lógica relacional. Esta interfaz se denomina "mapeo de objetos a bases de datos" (ORM, de sus siglas en inglés "object-relational mapping").
Aunque en la guía se indica que Propel es el ORM por defecto de Symfony, parece que ha sido eclipsado últimamente por Doctrine. De hecho éste último tiene varias ventajas respecto al primero como se indica en páginas como esta: http://www.hasheado.com/doctrine-vs-propel.html.

Hay una comparación "oficial" en esta otra página: http://trac.symfony-project.org/wiki/ComparingPropelAndDoctrine.

Mi primera impresión por la información que he encontrado es que Doctrine es la mejor opción. Además, solo el hecho de que esté basado en YAML y no en XML creo que ya representa una ventaja muy importante a la hora de trabajar. YAML es mucho más inteligible para un humano que el XML.

Pero dejando de lado opiniones e impresiones... ¡ojo! ¡Doctrine es el ORM oficial para Symfony 2!.

¿Qué es Symfony?

Para el que no tenga claro qué es Symfony en realidad, reproduzco a continuación el apartado "Symfony en pocas palabras" de la guía. Creo que da una idea clara de qué es y qué podemos esperar de él.
Un framework simplifica el desarrollo de una aplicación mediante la automatización de algunos de los patrones utilizados para resolver las tareas comunes. Además, un framework proporciona estructura al código fuente, forzando al desarrollador a crear código más legible y más fácil de mantener. Por último, un framework facilita la programación de aplicaciones, ya que encapsula operaciones complejas en instrucciones sencillas. 
Symfony es un completo framework diseñado para optimizar, gracias a sus características, el desarrollo de las aplicaciones web. Para empezar, separa la lógica de negocio, la lógica de servidor y la presentación de la aplicación web. Proporciona varias herramientas y clases encaminadas a reducir el tiempo de desarrollo de una aplicación web compleja. Además, automatiza las tareas más comunes, permitiendo al desarrollador dedicarse por completo a los aspectos específicos de cada aplicación. El resultado de todas estas ventajas es que no se debe reinventar la rueda cada vez que se crea una nueva aplicación web.
Symfony está desarrollado completamente con PHP 5. Ha sido probado en numerosos proyectos reales y se utiliza en sitios web de comercio electrónico de primer nivel. Symfony es compatible con la mayoría de gestores de bases de datos, como MySQL, PostgreSQL, Oracle y SQL Server de Microsoft. Se puede ejecutar tanto en plataformas *nix (Unix, Linux, etc.) como en plataformas Windows. A continuación se muestran algunas de sus características:

  • Fácil de instalar y configurar en la mayoría de plataformas (y con la garantía de que funciona correctamente en los sistemas Windows y *nix estándares).
  • Independiente del sistema gestor de bases de datos.
  • Sencillo de usar en la mayoría de casos, pero lo suficientemente flexible como para adaptarse a los casos más complejos.
  • Basado en la premisa de "convenir en vez de configurar", en la que el desarrollador solo debe configurar aquello que no es convencional.
  • Sigue la mayoría de mejores prácticas y patrones de diseño para la web.
  • Preparado para aplicaciones empresariales y adaptable a las políticas y arquitecturas propias de cada empresa, además de ser lo suficientemente estable como para desarrollar aplicaciones a largo plazo.
¡Las expectativas son realmente fantásticas! Con una herramienta semejante, se le puede dar un vuelco total a la forma de crear aplicaciones con PHP porque, para el que no lo tenga claro todavía, Symfony no es solo un framework desarrollado en PHP, es un framework para desarrollar en PHP.

Y algo MUY IMPORTANTE: aprender a utilizar Symfony no es como aprender un nuevo lenguaje de programación, sino que consiste en aprender a tomar las decisiones correctas para desarrollar las aplicaciones de forma más efectiva.

Manual de referencia

En español hay una guía de gran calidad. Además de completa y rigurosa está maravillosamente escrita y traducida. Se encuentra disponible tanto en formato Web como en PDF:


Este manual consta de 19 capítulos muy bien estructurados en los que se aborda Symfony de forma progresiva y partiendo de cero. Su lectura es imprescindible para los que desconocemos este framework y tenemos que entender qué es realmente y cuál es su filosofía de trabajo.

Nunca es tarde...

En el mundo "real" la programación casi siempre se aleja de lo ideal. Los plazos, los costes y otros muchos factores acaban por conducir los desarrollos por derroteros poco deseables que finalmente desembocan en aplicaciones innecesariamente complejas y farragosas, difíciles de mantener y cargadas de "fardos" de los que no hay manera de deshacerse y que condicionan para siempre su futuro.

Creo que,  no pocas veces, muchos de los que nos dedicamos al desarrollo sufrimos o hemos sufrido esta situación. Como nunca es tarde, he tomado la decisión de sumergirme en el mundo de Symfony para dar por fin un giro a los procedimientos de desarrollo de mi empresa. No creo que me resulte fácil a estas alturas de mi vida y teniendo en cuenta que con este framework parto de cero, pero ése es precisamente el reto y lo que da sentido a este blog. Voy a tratar de plasmar en él toda la información que pueda sobre los dilemas y dificultades que me encuentre para así ayudar, quizás, a algunos a facilitarles el camino y para quién sabe si recabar el apoyo de otros para solventarlas.

Bueno, aquí empieza la aventura y aquí están las puertas de entrada:
Desde luego las perspectivas son fantásticas.