Así serán las novedades de Symfony 2.0

Durante estos últimos días, el proyecto Symfony apenas ha generado noticias interesantes. Sin embargo, hace menos de una hora, su creador Fabien Potencier, ha publicado la noticia más importante del año desvelando todos los detalles de la futura versión 2.0.

symfony-20-plataforma

Con motivo de la conferencia de PHP en Québec, Fabien ha impartido una charla titulada Symfony 2 que presenta todas las novedades que tendrá la futura versión 2.0 de Symfony. Si no tienes tiempo de leer las 102 transparencias de la presentación, a continuación tienes un resumen:

  • Symfony 2 será una evolución de Symfony 1.x y no una revolución.
  • Symfony 2 seguirá siendo igual de flexible e inteligente que Symfony 1.x, pero ahora además será muy rápido.
  • Las grandes novedades de Symfony 2 serán: un contenedor de inyección de dependencias, un framework para plantillas y una nueva parte del controlador.

symfony-20-novedades

  • Si se utiliza como benchmark una aplicación web que sólo muestra por pantalla el mensaje "Hola Mundo", Symfony 2.0 es siete veces más rápido que Symfony 1.2 y cinco veces más rápido que Zend Framework. No obstante, los creadores de Symfony no se cansan de repetir que los benchmarks que utilizan aplicaciones tipo "Hola Mundo" son simplemente absurdos.
  • En aplicaciones web reales, la diferencia de rendimiento entre Symfony 2.0 y 1.2 no es tan grande, pero el núcleo de Symfony 2.0 sí que es mucho más rápido que el de Symfony 1.2.
  • La clave del nuevo Symfony 2.0 será el "gestor de peticiones" o Request Handler, que a su vez es la pieza clave de la renovada parte del controlador. En la presentación se explica cómo Dailymotion.com utiliza este componente para migrar de forma pregresiva su aplicación a Symfony.
  • El framework de plantillas está formado por cuatro componentes: motor (template engine), renderizador (template renderer), cargador (template loader) y almacenamiento (template storages). Se va a publicar como librería independiente y es tan avanzado que permite guardar las plantillas en cualquier medio (memoria, archivos, base de datos, ...), utilizar cualquier renderizador para crear las plantillas (PHP, Smarty, sistemas propios, ...) y realizar operaciones complejas como herencia de plantillas (layouts que decoran otros layouts, layouts que redefinen el valor de los slots, ...)
  • El contenedor de inyección de dependencias parece un concepto extraño, pero ya lo utilizan algunos frameworks como Spring. Simplificando al máximo su explicación, la inyección de dependencias consiste en pasar (inyectar) a las clases los objetos que necesitan mediante sus constructores.
  • El contenedor de inyección de dependencias de Symfony 2.0 reemplaza a los siguientes componentes de Symfony 1.x: sfContext, sfConfiguration, sfConfig, factories.yml, settings.yml, logging.yml y i18n.yml. Lo malo es que la inyección de dependencias requiere el uso de muchos archivos XML.
  • Para los más impacientes, todavía no se puede descargar Symfony 2.0 y tampoco se ha establecido ninguna fecha de lanzamiento. Recuerda que Symfony 1.3 saldrá en noviembre de 2009, por lo que seguramente Symfony 2.0 saldrá en 2010. No obstante, el nuevo controlador, el nuevo framework de plantillas y el contenedor de inyección de dependencias se publicarán pronto como proyectos independientes.

Ver la presentación Symfony 2 de Fabien Potencier

Comentarios

  1. Uff, se ve interessante, pero para mi pierde un poco de la filosofía de Symfony: la facilidad de uso. Lo de inyección de dependecias es lo mas farragoso que veo al igual que lo de los templates (a los que nunca les he visto mucho sentido francamente).

    Saludos y buen post!

    Marc.

    Marc el 7 de marzo de 2009, 15:55:05

  2. Con respecto a los templates era lo que muchos esperábamos, en ese plano cualquier aporte será muy bienvenido... Los códigos generados y construidos en symfony tienden a ser muy ordenados, sin embargo, la parte de diseño está sujeto a libertades de todo tipo lo que posibilita ensuciar un trabajo robusto en las capas controlador y modelo. Esto es fácil de entender al ver los códigos de algunas aplicaciones que pululan en internet, y en el mismo grupo cuando se realizan preguntas.

    Por otra parte, con respecto al contenedor de inyecciones, si bien es un tema que suena engorroso, facilitará en gran medida los desarrollos continuando la filosofía de Symfony como se hace alusión en un comentario anterior. Las dependencias siempren han sido un problema, y esto justamente viene a ser un aporte en esas áreas. Con respecto a la cantidad de archivos XML o YML que serán necesarios, no será ningun hándicap si se mantiene el orden, la eficiencia de las configuraciones por defecto y una buena documentación a disposición como ha sido siempre.

    Ambos consideros que son pasos importantísimos!!!

    Rodrigo Miranda el 7 de marzo de 2009, 16:44:19

  3. Todo excepto lo de los templates me parece genial. Nunca he compartido la necesidad de una capa de presentacion que ademas incluya logica sobre los templates (smarty, etc.), pero me imagino que como symfony es lo mejor hara uso de la cache, asi que en últimas, el desempeño de una vista sin motor de templates y una con motor deberian un rendimiento similar.

    Lo del dependency injection o IoC me parece genial, solo cabe aclarar que usar xml para unir los objetos no es el unico medio, se puede hacer manualmente a medida que se necesite, o tener una clase dedicada a este menester, en fin, lo importante será ver como se desacopla el framework, si antes estaba desacoplado me imagino como será despues. Felicitaciones para Fabien y Sensio en general por darle tanta flexibilidad, libertad y encanto al futuro de symfony.

    Leonardo Diaz el 8 de marzo de 2009, 5:41:48

  4. Frameworks como Zend framework desde hace ya algunas versiones implementan la inyección de dependencias. Esto es muy sencillo en PHP de implementar ya que nativamente el lenguaje proporciona herramientas para hacerlo. En lenguajes como Java esto realmente es una ayuda ya que características dinámicas era complicadas de implementar hace un tiempo . El uso de la inversión de control ó inyección de depdencias aumenta considerablemente la flexibilidad pero notese que Spring utiliza programación orientada a aspectos que integra horizontalmente los componentes de la aplicación, en cambio en Symfony debe haber un componente integrador que haga esta tarea por lo cuál no se implementa realmente el IoC que dicen van a hacer.

    Andres el 15 de marzo de 2009, 23:46:03

  5. Andrés, ten en cuenta que en esa presentación Fabien sólo ha realizado un vistazo rápido a la inyección de dependencias. Cuando se finalice el desarrollo de ese componente, se va a publicar como proyecto independiente y entonces veremos si es completo o le faltan cosas importantes.

    Javier Eguiluz el 16 de marzo de 2009, 9:02:23

  6. Yo actualmente desarrollo bajo symfony 1.3. Si en futuro requiero descargar de nuevo esa versión, la tendría disponible o ya no podría? tendría que emigrar mi aplicación en pleno proceso de desarrollo? Si se podría descargar symfony 1.2.4 como lo haría cuando estén las otras versiones?

    williams rivas el 3 de abril de 2009, 21:12:56

  7. Williams, Symfony 1.3 saldrá en noviembre de 2009, así que en vez de Symfony 1.3, quizás querías decir que trabajas con Symfony 1.2.3. Actualizar entre versiones de la misma rama es inmediato y jamás tendrás ningún problema, así que sigue desarrollando con la 1.2.3 y pásate cuando quieras a 1.2.4 o 1.2.5.

    Por otra parte, pasar tu aplicación a Symfony 2.0 si que requerirá muchísimos cambios, así que ni será fácil ni será inmediato.

    Javier Eguiluz el 4 de abril de 2009, 14:41:29

Este artículo ya no permite añadir más comentarios.
¿Por qué? Los artículos cierran sus comentarios automáticamente unos meses después de su publicación para asegurar que estos sigan siendo relevantes.

Publicada el

6 de marzo de 2009

Etiquetas

Proyectos Symfony destacados

La plataforma de eCommerce 100% Symfony que rivaliza con Magento y PrestaShop. Ver más

Síguenos en @symfony_es para acceder a las últimas noticias.