Este post es una reflexión sobre si realmente utilizar un framework es el camino para desarrollar aplicaciones web o es mejor utilizar un cms como WordPress o quizá una estructura de clases propia que reutilicemos en los futuros proyectos que afrontemos.
Utilizar un framework como Symfony
Para mí, adoptar Symfony como framework ha sido una de las mejores decisiones que he tomado en mi historia como desarrollador web.
Symfony es un framework excelente, muy personalizable, extendible y automatizado que además, te enseña a programar bien.
¿Qué es programar bien? Para empezar, usar patrones de diseño, aprovechar todas las ventajas que ofrece la POO al máximo posible ademas de, por encima de todo, evitar repetirte.
Symfony no es el único framework que permite esto, también Zend es otra opción excelente.
Sin embargo, en los últimos meses he tenido la oportunidad de participar en proyectos fuera de las necesidades comunes. Ya sea por rendimiento o por la naturaleza de la aplicación, teníamos que especializar bastante funcionalidad del core de symfony, aprender casi de memoria los parámetros de los archivos .yml de configuración o incluso, extender el framework para que cumpliese con los requisitos de la arquitectura de sistemas.
Esto supone en algunos casos muchas horas más que en un proyecto de php digamos “sin framework”, pero una vez conseguido el tiempo se reduce en la próxima ocasión que te encuentras con el mismo problema, si lo haces.
Hay pequeñas situaciones en las que debemos invertir tiempo para desarrollar pensando en el framework para obtener funcionalidad que sería trivial en un entorno sin framework. Sin embargo en general compensa porque nuestro código queda totalmente integrado con una arquitectura que tiene un nivel muy alto de calidad.
Pero otro problema aparece cuando de repente se anuncia una nueva versión del framework y empiezas a ver que todo lo que has aprendido en la versión 1, es completamente distinto en la versión 2. Esto es algo bastante costoso de asumir para los desarrolladores ya que algunas de las ventajas más importantes de utilizar un framework son precisamente las que en este caso, se ha puesto en contra de todos nosotros:
- Todos habíamos aprendido a programar en nuestro día a día pensando en symfony, con sus configuraciones y la nomenclatura de sus clases.
- Todos conocíamos perfectamente los nombres de los directorios, archivos de configuración y comportamientos de los métodos que se usan en las clases más importantes del framework, así como dónde teníamos que encontrar los recursos de documentación necesarios para nuestro día a día.
- Habíamos desarrollado código reutilizable como plugins, concepto que desaparece en la próxima versión.
Estos puntos son los más negros que quizá se puedan encontrar a la hora de decidirse por un framework que no sea uno nuestro propio. Sin embargo y a pesar de los mismos, creo que en general es una decisión muy buena el optar por un framework de desarrollo.
Utilizar un CMS como WordPress
Otra opción que existe es optar por un cms como WordPress. Hablo de WordPress porque es el que más conozco a “bajo nivel”. Si estás acostumbrado a utilizar un framework como Symfony, tienes la sensación al desarrollar bajo una plataforma para nada óptima (en cuanto a rendimiento se refiere) y que se salta a la torera cientos de recomendaciones sobre cómo desarrollar en un entorno POO.
Sin embargo el sistema funciona para la mayoría de proyectos medios o básicos, los diseñadores están encantados con él y ya lo conocen debido a la facilidad de uso de su sistema de themes, funciona sin tener que tocar prácticamente nada en la mayoría de plataformas de hosting y cubre con la necesidad funcional de todo sitio medio que no tenga necesidad de un desarrollo continuado.
Aunque sea una opción poco óptima fuera de la caja, en Blackslot tenemos corriendo varios sitios con decenas de miles de visitas al día basados en esta plataforma, con ayuda de soluciones de caché internas, teniendo aún margen para escalar a bastante más tráfico sin demandar grandes cantidades de recursos de servidor.
El problema reside más bien en el tipo de funcionalidad que quieres afrontar con el cms y la calidad que esperas obtener con el mismo. Yo no desarrollaría una intranet en WordPress por ejemplo, ni una plataforma de tienda electrónica para un negocio que dependa exclusivamente de esta plataforma para funcionar.
Utilizar PHP desde 0
Aunque durante muchos años he defendido el utilizar php sin frameworks hoy en día lo desaconsejo por completo.
Hace años no existía ninguna opción seria para php equiparable a un entorno .net por ejemplo. Hoy en día hay tantos que cuesta elegir.
No digo que debas elegir una de las opciones más maduras disponibles (que para mí sólo hay dos: Zend o Symfony). Lo que digo es que a menos que tu negocio sea una sola web y tengas el foco y todo tu tiempo puesta en ella, necesitas un framework para conseguir sobre todo estos puntos:
- Desarrollar con más programadores en el mismo proyecto sin que sea un caos.
- Trabajar con más gente en el mismo proyecto. A diferencia del punto 1, tienes que tener en cuenta a diseñadores, maquetadores, analistas, gente de sistemas..
- Tener una base reutilizable que os ahorre, a medida que desarrolléis con la misma, más y más tiempo.
- Conseguir automatizar las tareas más repetitivas y centrarte en el código específico de la aplicación que te ocupe en ese momento.
Aunque creas que lo mejor es ponerte a desarrollar un framework propio desde el principio, merece la pena conocer los frameworks que existen para aprender de miles de desarrolladores que han tenido muchos más problemas y por lo tanto tienen más experiencia que tú.
Desarrollar un framework sin haber utilizado otro antes como Symfony o asp.net mvc es una tarea muy compleja que puede hacerte perder mucho tiempo. Actualmente no es casualidad que Ruby On Rails, Symfony, asp.net mvc y otras opciones para desarrollo web escritas en diferentes lenguajes se parezcan entre sí. Esto es porque los problemas que nos solemos encontrar en el día a día son los mismos y es muy bueno conocer alguno de estos frameworks al detalle para orientarte sobre cómo debes organizar la arquitectura de una aplicación web seria.
En mi caso, incentivado por el cambio de versión de Symfony y por algunas de las cosas que no me han gustado o que he visto demasiado complejas en el mismo para solucionar determinados problemas, he empezado a diseñar y desarrollar en mis tiempos muertos un framework mucho más ligero y simple que Symfony pero pensado tanto para entornos tanto de hosting compartido como para arquitecturas más complejas.
Sin embargo no voy a dejar de utilizar ni Symfony ni WordPress. Me encanta Symfony y muchas de las cosas que he aprendido con este framework las estoy aplicando en este proyecto e incluso utilizo alguno de sus componentes. WordPress por su parte es la mejor opción para reducir costes en determinados proyectos que no requieran ni complejidad ni funcionalidad fuera de lo que se espera de un sistema de publicación.