Frameworks y bibliotecas: ¿cuál es la diferencia?
Cuando aprendes a programar, te encontrarás con los términos "framework" y "biblioteca". Express es un "framework web", jQuery es una "biblioteca" y React... bueno, en realidad es una "biblioteca", pero se utiliza "como un framework".
¿Cuál es la diferencia?
Analogía del laboratorio: kits vs. reactivos
Biblioteca = reactivo individual
Piensa en el reactivo de Bradford. Cuando necesitas cuantificar proteínas, lo sacas y lo usas, y cuando no lo necesitas, lo guardas en el refrigerador. Tú diseñas el flujo del experimento y el reactivo solo aparece en una de las etapas.
En el código, una biblioteca es similar:
const axios = require("axios");
const response = axios.get("https://api.example.com/genes");Estoy utilizando la biblioteca axios y la invoco cuando la necesito. Yo decido el flujo general del programa.
Framework = kit de experimentos (incluido el protocolo)
Piense en un kit ELISA. El kit contiene una placa de 96 pocillos, anticuerpos, tampón y solución de lavado, y debe seguirse el protocolo establecido. Paso 1: recubrimiento → Paso 2: bloqueo → Paso 3: adición de muestra... Si cambia el orden, no obtendrá resultados.
Express es igual:
const express = require("express");
const app = express();
app.get("/samples", function(req, res) {
res.json({ message: "Lista de muestras" });
});
app.listen(3000);Express es un framework que define una estructura, y yo solo escribo la parte que necesito completar (qué responder en la ruta "/samples"). Estoy insertando mi código dentro de un molde llamado app.get(), no estoy diseñando todo el flujo de procesamiento de la solicitud HTTP.
Diferencia clave: ¿quién llama a quién?
| Biblioteca | Framework | |
|---|---|---|
| Iniciativa | Escribo el código y llamo a la biblioteca cuando la necesito | El framework gestiona todo el flujo y llama a mi código |
| Analogía | Yo saco y uso los reactivos | El protocolo del kit me guía |
| Forma del código | biblioteca.función() Yo llamo | el framework llama a mi función |
| Libertad | Alta (puedo combinar como quiera) | Baja (trabajo dentro de una estructura definida) |
En la ingeniería de software, esta diferencia se llama "Inversión de control". Cuando uso una biblioteca, yo tengo el control, pero cuando uso un framework, el framework tiene el control y llama a mi código en el momento adecuado.
Cuando uso app.get("/samples", function(req, res) { ... }) en Express, esta función de devolución de llamada no la ejecuto yo directamente. Cuando alguien accede a /samples, Express llama a esta función automáticamente. Esta es la estructura de "el framework me llama".
Clasificación de lo que hemos aprendido
| Nombre | Clasificación | Razón |
|---|---|---|
| Express | Framework | Express gestiona el flujo de solicitud-respuesta. Mi código se inserta como una función de devolución de llamada |
| React | Biblioteca (oficial) | Solo se encarga del renderizado de la interfaz de usuario. El enrutamiento/gestión del estado se elige por separado |
| mysql2 | Biblioteca | Yo la llamo cuando necesito una conexión a la base de datos |
| Next.js | Framework | Next.js gestiona la estructura de archivos, el enrutamiento y la compilación |
React es oficialmente una "biblioteca". Sin embargo, cuando se usa con Next.js, funciona como un framework. Esta frontera no es tan clara.
¿Por qué usar un framework?
"Si tiene menos libertad, ¿por qué usar un framework?"
Consistencia: Si 10 miembros del equipo crean servidores con estructuras diferentes, el mantenimiento se vuelve imposible. Si el framework impone una estructura, se puede leer el código escrito por cualquiera con un patrón similar.
Eliminación de la repetición: Perdería tiempo si tuviera que crear manualmente el enrutamiento, el manejo de errores, los middleware, etc. El framework ya tiene todo esto hecho.
Diseño probado: Es una estructura que ha sido utilizada y probada por decenas de miles de desarrolladores en todo el mundo. Tiene menos errores que algo diseñado por mí solo.
En los experimentos ocurre lo mismo. Se puede crear un ensayo propio y original, pero si se utiliza un kit validado, los resultados serán más fiables y otros investigadores podrán reproducirlos con mayor facilidad.
Conclusión: en una frase
Una biblioteca es una "herramienta que yo llamo", y un marco de trabajo es un "sistema que me llama".
Recuerde cuando usaba Express y colocaba una función de devolución de llamada en app.get(). No era usted quien ejecutaba esa función de devolución de llamada, sino Express. Eso es un marco de trabajo.