¡Frameworks! Frameworks everywhere…

Bienvenidos un día más a un nuevo rootie queridos amigos! Vuelvo una semana más a vosotros mis queridos lectores (si los cuatro de todas semanas) para traeros un articulo que debería haber escrito hace unas semanas. Hoy voy a escribir un post generalista y con una carga técnica más reducida, hoy vamos a introducir los frameworks.

frameworks everywhere

Frameworks, ¿por qué siempre vienes con semejantes palabros?

Para aquellos que no sepáis de que va esto, vamos a empezar como siempre, con la definición de la sacrosanta Wikipedia:

La palabra inglesa “framework” (infraestructura, armazón, marco) define, en términos generales, un conjunto estandarizado de conceptos, prácticas y criterios para enfocar un tipo de problemática particular que sirve como referencia, para enfrentar y resolver nuevos problemas de índole similar. – Wikipedia

Como vosotros mismos acabáis de leer esta definición podemos aplicarla a casi cualquier cosa, desde como cocinar una tarta a como arreglar relojes de cuco.

frameworks cake php lie
Si pillas el chiste, malas noticias, estas tan roto como yo…

Este concepto cuando es llevado al mundo del desarrollo del software, directamente se convierte en una estructura conceptual y tecnológica con el objetivo de servir de base a diferentes proyectos. Esta cualidad se suele afrontar ofreciendo una serie de herramientas integradas en el framework. Estas herramientas suelen dar, sino una ventaja, una “ayuda” por decirlo de alguna manera a la hora de desarrollar nuestro proyecto.

Características que definen un framework.

Como podemos ver de la definición y mi comentario, casi cualquier cosa que nos ofrezca un conjunto de herramientas cae bajo la denominación  de framework, pero nada mas lejos de la realidad.

Para diferenciar entre lo que sería una biblioteca de un framework, este último ha de implementar las siguientes características:

  • Comportamiento definidoUn framework ha de tener un comportamiento predeterminado, siendo útil, definido e identificable.
  • inversión de control: A diferencia de las librerías o aplicaciones estándar, el flujo de control del programa no esta definido por el programa que llama, si no por el framework
  • Extendibilidad: Un framework tiene que poder ser extendido para ofrecer una funcionalidad especifica. Esto puede ser realizado a través de sobre escritura de métodos o a través de agregar código especializado para ello. Como por ejemplo creando un Bundle o Paquete que contendrá toda dicha funcionalidad.
  • Código no modificable: Este último punto puede que sea el mas polémico y difícil de asumir, ya que no hay una manera efectiva de definirlo. En teoría, nunca, nunca, pero nunca de los nuncas debemos modificar directamente el core de código del framework. Si este no nos ofrece una solución al problema, debemos buscar implementarlo a través de la extendebilidad o replantearnos si dicho framework es el apropiado para resolver el problema que manejas.

Tipos de frameworks.

Hoy en día existe una gran variedad de frameworks. para, yo diría, casi cualquier lenguaje moderno y para cada ámbito del negocio. Hablando solo de desarrollo web, podemos encontrar frameworks fullstack, cubriendo el backend y la parte de templating, como por ejemplo:

  • Symfony 2/3.
  • Spring.
  • .NET.
  • Django.
  • RubyOnRails.
  • Ember.

Tenemos luego frameworks para el front-end, que incluyen normalmente CSS y JS (para los componentes principalmente):

  • Bootstrap.
  • Semantic-UI.
  • Foundation.
  • Materialize.
  • Material UI.

Ademas podemos encontrar frameworks para cosas tan específicas como testing tanto unitario, como de comportamiento, etc:

  • PHPUnit
  • Selenium
  • Maven (integración)
  • Serenity
  • Robot Framework

La lista de tipos y frameworks, sigue y sigue ya que cada día prácticamente aparece un framework nuevo (Y la mayor parte del tiempo son frameworks hechos en Javascript).

tipos de frameworks
Aquí vemos los frames mas elegantes

Ventajas de usar frameworks.

Hasta ahora hemos visto que es un framework, cuales son sus características, etc. y de ello habréis podido extraer vuestras propias conclusiones sobre las ventajas de usar una framework a la hora de desarrollar proyectos, pero aun así voy a listar las que yo pienso que son las mayores ventajas.

  1. Reduce drásticamente el tiempo y la energía necesaria para desarrollar cualquier software.
  2. Todos frameworks (o su mayoría) siguen un patrón de diseño, lo que nos impone el adaptarnos al mismo.
  3. Haciendo uso de frameworks, el desarrollador puede emplear mas tiempo en desarrollar los requerimientos.
  4. Ofrecen un sistema estándar a través del cual el programador puede desarrollar aplicaciones o módulos, sin tener que desarrollar detalles de más bajo nivel.

Desventajas de usar frameworks

  1. Para los nuevos usuarios usar un framework de forma efectiva, es virtualmente imposible. No todos frameworks tienen la misma curva de aprendizaje, pero esta está siempre ahí.
  2. El concepto una-talla-para-todos normalmente no suele funcionar de la forma mas eficiente. Esto hace que cuando manejamos proyectos con unas necesidades muy especificas alejadas de lo mas común, nos obliga ha extender el framework.
  3. La mayoría de los frameworks no son adecuados para pequeños proyectos (como la página de tu primo el panadero del barrio). En estos casos, cualquier lenguaje usado sin frameworks, funcionará más rápido.
  4. Todos frameworks (o su mayoría) siguen un patrón de diseño, lo que nos impone el adaptarnos al mismo.

Seguro que cualquiera puede agregar más desventajas. Cabe señalar que el punto cuatro puede ser tanto una ventaja como una desventaja ya que en según que casos, el patrón puede darnos mas dolores de cabeza que ventajas.

Consideraciones a la hora de elegir framework.

Elegir un framework no es un tema sencillo, muchos programadores noveles, se lanzan a realizar proyectos personales con el framework que han aprendido y eso puede ser catastrófico, si el proyecto alcanza complejidad y relevancia.

En mi humilde opinion antes de elegir un framework has de realizar una reflexión sobre ciertos puntos:

  • ¿Es el proyecto lo suficientemente complejo como para benficiarse del uso de un framework?
  • ¿Es el rendimiento una prioridad máxima?
  • ¿Tengo el conocimiento suficiente sobre el lenguaje del framework, como para poder entender profundamente el mismo?
  • ¿Voy a ser capaz de sobreponerme a un imprevisto generado por la propia naturaleza del framework?
  • ¿Se adapta la funcionalidad estándar del framework a mis necesidades?

Si a estas preguntas has contestado que no a más de una de ellas, como consejo, párate a pensar bien si estas haciendo la decisión acertada.

Como nota final, decir que yo soy un gran fan de los frameworks, especialmente de Symfony, pero hay momentos en los que trabajando, me han dado ganas de cortarme las venas. Principalmente debido a las imposiciones o limitaciones que utilizando PHP no existirían.

Y con esto nos despedimos por hoy, espero que hayáis disfrutado (y aprendido) leyendo el post de hoy tanto como yo he disfrutado escribiéndolo.

Como siempre para cualquier duda, pregunta, comentario, insulto, soborno o amenaza, podéis usar los comentarios o en nuestras redes sociales Facebook y Twitter.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *