Qué diferencia hay entre una librería y un framework

Leí esta pregunta en Twitter y me hizo pensar un poco:

Pregunta de Maripy

Estos conceptos pueden resultar confusos. Al fin y al cabo, se trata siempre de usar código de terceros dentro de nuestras aplicaciones, ¿cierto?

Pues desde un punto de vista muy técnico sí, pero conceptualmente son dos cosas muy distintas.

Lo primero para comprender las diferencias entre ambos es definir de qué se trata cada uno.

Vayamos a ello.

Qué es una librería

El término librería es en realidad una mala traducción de library, el término correcto sería biblioteca, aunque, como tantas otras, esta palabra ya ha pasado a formar parte de la cultura de los programadores hispanos (Otro de los problemas de usar el spanglish).

Habiendo hecho esta aclaración, vamos al tema.

Una librería es un artefacto de código diseñado para:

  1. Resolver una problemática específica (Por ejemplo: enviar correos electrónicos)
  2. Ser utilizado en muchas aplicaciones diversas

En definitiva es un código lo suficientemente específico como para resultar útil y, a la vez, suficientemente genérico como para ser fácilmente incoporado a cualquier aplicación que lo necesite.

La existencia de librerías, especialmente las de código abierto, han sido históricamente la clave del crecimiento de los ecosistemas que rodean a algunos lenguajes o plataformas. PHP es un claro ejemplo de ello.

La utilización de una librería en nuestro código implica la obtención del código en cuestión y la inclusión del mismo dentro del nuestro.

En el caso de PHP, la forma más simple (¡aunque definitivamente no la más recomendada!) de hacer esto es descargar el código del sitio del fabricante, normalmente un archivo .zip, descomprimirlo en algún directorio dentro de nuestro proyecto y, por último, realizar la inclusión con algún comando similar a:

<?php

require_once '/path/to/library/library.php';

A partir de esta inclusión ya podemos hacer uso de todos los recursos que brinde la librería, los cuales pueden ser funciones, clases, etc… esto ya depende específicamente de cómo esté estructurada la librería de que se trate.

Qué es un framework

Un framework o marco de trabajo es una herramienta que sirve como base de un proyecto.

Usualmente un framework no resuelve una necesidad específica si no que busca orientar el modo en que debería desarrollarse una aplicación.

Una ventaja de utilizar un framework es ahorrarse el esfuerzo de definir una cantidad de cuestiones que no tienen que ver con las necesidades de negocio que la aplicación debe solventar, si no que hacen a la organización del trabajo.

Por ejemplo, algo muy típico de los frameworks es establecer una estructura de directorios. Al desarrollar cualquier aplicación de complejidad media/alta es una necesidad muy común el distribuir el código de alguna forma que ayude al equipo de desarrollo a encontrar rápidamente los archivos donde deben realizarse las modificaciones.

Si no se utiliza un framework esta decisión deberá ser tomada por el equipo de desarrollo.

Esta es, por ejemplo, la estructura básica de un proyecto basado en Symfony:

Además de esto, un framework usualmente trae consigo una cantidad de herramientas (clases, funciones, etc…) para ser utilizadas como base del desarrollo.

Nuevamente, por tomar el ejemplo de Symfony, éste trae clases que pueden ser extendidas para adaptarlas a las necesidades específicas del problema a resolver pero que ya tienen resueltas las más básicas. Una de estas clases es AbstractController, la cual resuelve cuestiones como la obtención de parámetros desde una URL y deja todo listo para que podamos ocuparnos de nuestros problemas particulares.

Además de esto, los frameworks suelen traer una serie de herramientas de generación de código, lo cual ayuda mucho a realizar nuestro trabajo de forma más eficiente.

Por último, en este pequeño resumen, un framework suele incorporar una serie de librerías lo cual evita el trabajo de ir seleccionando una por una.

Framework o librería

Bien, ahora que los conceptos están claros podemos empezar a pensar en las diferencias.

Antiguamente, antes de la creación del PHP-FIG al menos, la diferencia era bien clara: un proyecto comienza por la instalación de un framework y luego, si es necesario, se incorporan nuevas librerías.

Hoy en día la situación es algo más difusa: practicamente todos los frameworks están pensados más como conjuntos de librerías que como paquetes cerrados. Más similar a como funcionan las distribuciones de Linux.

De esta forma, es perfectamente posible hacer un poco de elige tu propia aventura, combinando aquellos componentes que aportan a nuestro proyecto y dejando de lado aquellos que nos resultan superfluos.

Por supuesto que este es un uso avanzado, no lo recomiendo para quien no está muy familiarizado con el tema.

Un último detalle que no puedo dejar de mencionar, para cerrar el comentario que hice más arriba sobre que descargar manualmente una librería no era la forma recomendada. La forma correcta de hacerlo es utilizar una herramienta de manejo de dependencias, a día de hoy, por lejos la más utilizada es composer.

mchojrin

Por mchojrin

Ayudo a desarrolladores PHP a acceder mercados y clientes más sofisticados y exigentes

¿Te quedó alguna duda? Publica aca tu pregunta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.