¿Deberías usar un framework para tu proyecto web?

¿Sabes qué es un framework? ¿Tienes experiencia con algún framework? ¿Consideras que el uso de framework es favorable o perjudicial? En este post se realiza una breve introducción a los frameworks. En una primera parte veremos qué son los frameworks, continuaremos viendo cuáles son las ventajas de usarlos y, por último, veremos cuáles son sus inconvenientes, que no todo son flores…

Este tema es un tanto delicado. Siempre que se habla de frameworks existen dos grandes bandos: los que alaban sus bondades (dando menor importancia a sus incovenientes) y los anti-frameworks, aquellas personas muy clasicistas” a los que ninguno de los argumentos en defensa de los frameworks les sirve de excusa para arriesgarse o dar el salto al cambio.

¿Qué es un framework?

Definir qué es un framework puede parecer sencillo, pero, en realidad, es complicado. No obstante, cualquier persona con unos mínimos conocimientos técnicos y/o experiencia en el sector, sabe intuitivamente qué es un framework.

Un framework, por lo general, se define como aquella aplicación o conjunto de módulos que permiten, o tienen por objetivo, el desarrollo ágil de aplicaciones mediante la aportación de librerías y/o funcionalidades ya creadas para que nosotros las usemos directamente.

El objetivo de los frameworks es hacer que nos centremos en el verdadero problema, y no preocuparnos por implementar funcionalidades que son de uso común en muchas aplicaciones, como podría ser el proceso de login de usuarios o establecer la conexión con la base de datos. Por tanto, cuando usamos frameworks, nuestra mente ha de centrarse en el verdadero centro del problema y hacer fluir todos los detalles “menores” ya que seguramente el framework nos dará una solución para ellos.

¿Por qué usar un framework para tu proyecto web?

Hemos llegado al punto más difícil. Intentar convencerte de usar frameworks, ya que el uso de frameworks a medio/largo plazo tiene ventajas en el mantenimiento de la aplicación/código, ampliaciones, mejoras, etcétera, a diferencia de no usar ninguno.

Uno de los motivos que más me convence de los frameworks es que suelen basarse en el patrón de diseño MVC (Model-View-Controller). Este patrón de diseño dice que nuestra aplicación, debería tener, al menos, estas tres capas: modelo, vista y controlador. Alguien se me podría echar encima con el argumento: es que ese patrón de diseño lo puedes implementar sin usar ningún framework. Pues no le falta razón, es cierto, se podría implementar sin usar ningún framework. Pero la diferencia radica en que el framework te guía/obliga a implementar este patrón, lo cuál hará que tu aplicación sea más robusta. Por otro lado, si decides implementar el patrón sin usar framework corres el riesgo de que un mal día metas código en la capa que no debes, y todo pueda acabar en el archiconocido spaghetti code, lo cuál hará, con el paso del tiempo, que nuestra aplicación se vaya volviendo día tras día más difícil de mantener.

Los frameworks nos guían en el proceso de desarrollar nuestra aplicación siguiendo el patrón de diseño MVC, pero… ¿qué son estas capas? ¿para qué sirve cada una de ellas?. La capa modelo es la que se encarga de trabajar con los datos, habitualmente es la que se encarga de almacenar los datos (una base de datos por ejemplo). Por su parte, la vista es la capa de presentación, cómo presentamos los datos al usuario final, al cliente de nuestra aplicación. Y, por último, el controlador es el mediador entre el modelo y la vista. Normalmente la vista requiere de datos del modelo, pero la vista no tiene comunicación directa con el modelo. Por tanto, la vista pide esos datos al controlador y éste a su vez al modelo, el modelo maneja los datos en la forma que defina nuestra lógica de la aplicación y devuelve la respuesta de nuevo al controlador, quién, por último, entrega esta respuesta a la vista para poder ser renderizada.

Ventajas de usar un framework

También me gustaría destacar otras ventajas de los frameworks:

  • Convention over configuration: los frameworks suelen tener una serie de reglas de convención. Entre estas reglas está por ejemplo la estructuración de directorios. Así, si conocemos estas reglas, cuando en un tiempo necesitemos tocar algo en el código, sabremos rápidamente dónde localizar este código porque tendremos montada una buena jerarquía de directorios mucho mejor de la que podríamos crearnos manualmente si no utilizaramos frameworks. No obstante, muchos frameworks permiten y dan total libertad para saltarte (si es de tu agrado) estas convenciones por defecto, y crear las tuyas propias.
  • El código de las librerías base que aportan los frameworks está muy testeado. Podrías desarrollar tú una librería con las mismas funcionalidades pero alcanzar un nivel de testeo tan grande como lo han conseguido muchos frameworks no es fácil. Entonces mejor usar un código que está muy probado a reinventar la rueda, ¿no?
  • Casi todos los frameworks disponibles hoy en día poseen una comunidad (unas más grandes que otras) de usuarios. En esta comunidad de usuarios, algunos de ellos desarrollan módulos o extensiones para el framework y lo distribuyen gratuitamente. Imagina que requieres de una funcionalidad que de base el framework no te da. Pero has encontrado un módulo desarrollado por alguien de la comunidad de usuarios para tu framework con dicha funcionalidad. En lugar de desarrollarla tú, sería tan fácil como incorporar ese módulo a tu aplicación.
  • Permite que el trabajo en equipo sea más sencillo. Si todo el equipo conoce el funcionamiento del framework, todos sabrán, por ejemplo, la estructura de directorios de la aplicación y sabrán localizar con facilidad el fichero de código fuente con el que requieran trabajar. Además, si en un futuro incorporas más personal a la plantilla, este personal con que conozcan el framework es suficiente. Y te puedo asegurar que encontrar un perfil con esta condición será mucho más sencillo que encontrar alguien que conozca tu sistema, totalmente inventado por tí y sin usar frameworks…

Desventajas del uso de frameworks

Hay mucha gente que acusa a los frameworks de todo el código basura que puede llegar a insertar en nuestra aplicación. Este es un punto con el que no estoy de acuerdo. O al menos para los frameworks que he probado y/o utilizado a día de hoy. En mi propia experiencia con diferentes frameworks, ninguno de ellos, absolutamente ninguno, me ha introducido ni una pizca de código basura. Por tanto, es un punto en el que discrepo, al menos hoy por hoy. Mañana, cuando conozca más frameworks y me encuentre uno de éstos entonces haré un post y hablaré de ello.

La principal desventaja que adjudico al uso de frameworks es la curva de aprendizaje. Antes os decía que usando frameworks, la aplicación se desarrollaría en menos tiempo. Y es cierto, pero esto sucede una vez que conoces y tienes experiencia con el framework. La primera aplicación que desarrolles con un framework nuevo (para tu experiencia), seguramente invertirás más tiempo que si la desarrollases sin usar ningún framework. Pero, a medio/largo plazo hubieras ganado más tiempo y menos dolores de cabeza si hubieras usado un framework. Porque el framework, una vez que lo conoces, te permitirá un mantenimiento de la aplicación mucho más ágil, además de que la aplicación, desde sus cimientos, será mucho más robusta que si la desarrollarás sin ningún framework.

Conclusiones

Seguramente, si eres de los que quieren que algo esté desarrollado para ayer, tu conclusión será no usar frameworks, ya que no quieres perder ni un sólo segundo en aprender (o que tus empleados aprendan) a usar un framework. Por contra, si eres de los que piensan a medio/largo plazo y te preocupa lo que dará menos problemas en un futuro, quizás tu conclusión es decidir invertir más tiempo en los inicios, para el aprendizaje del framework, pero a la larga sabes o esperas rentabilizarlo.

Personalmente considero que el uso de frameworks es una práctica muy buena y que, efectivamente en unos inicios puede que no veas todos sus frutos, pero a medida que pasa el tiempo agradecerás más la decisión que tomaste de usarlo.

Y tú, ¿qué piensas del uso de frameworks? ¿estarías dispuesto a invertir para ti o tus empleados más tiempo al inicio en el aprendizaje de algún framework, o no? ¿tienes experiencia con algún framework y te gustaría compartirla con nosotros? ¿son los frameworks una moda, o han llegado para quedarse?