programacion-que-son-las-dependencias

Qué son las dependencias en programación

Las dependencias entre librerías se refieren a la relación que existe entre diferentes bibliotecas o paquetes utilizados en un programa.

Cuando un módulo A depende de otro módulo B, significa que el módulo A utiliza el módulo B. O dicho de otra forma, que el módulo A necesita el módulo B para funcionar.

programacion-referencia-a-b

Tu módulo A depende del módulo B

En principio, incluir una dependencia entre librerías no es algo malo. Se hace todos los días, y sería casi imposible realizar un programa sin dividirlo en módulos.

Sin embargo, también tiene su parte negativa. Si no gestionamos correctamente las dependencias tu programa se puede convertir en un infierno 🔥🔥🔥.

¿Por qué hacemos una entrada solo para explicar las dependencias? En realidad, es algo bastante sencillo de entender.

Pues porque es uno de los mayores problemas que vais a tener en desarrollo. Ha sido así desde siempre, y no creo que se vaya a arreglar. Así que se merece que hagamos una pausa y hablemos de ello.

Veamos un ejemplo sencillo

Vamos a verlo con un ejemplo muy simplificado con sólo cuatro dependencias. Pero tened en cuenta que en un proyecto normal lo normal es tener cientos de dependencias.

Situación inicial, “mi aplicación”

Supongamos que estás haciendo tu aplicación llamada “mi aplicación”. Entre muchas cosas, tu aplicación gestiona Notas y Adjuntos.

programacion-dependencias-1

  • Para ello tú, o un compañero de trabajo, han hecho dos librerías “Librería notas” y “Librería adjuntos”.

  • Estas a su vez dependen de otras dos librerías con funciones útiles para gestionar Textos y Fechas. Vamos a suponer son Open Source, y mantenidas por la comunidad.

Hasta aquí, vamos muy bien ¡Perfecto!

Actualización 1

Ahora, supongamos que se actualiza la librería “Utilidades textos” a v2.0. ¡Genial! Seguro que tiene funciones muy interesantes y útiles. Funciones que igual ni necesitas para nada… pero oye, ahí están.

programacion-dependencias-2

Así que esto supone que deberías actualizar tu “Librería notas” y tu aplicación a v2.0.

Actualización 2

Pasa un tiempo, y se actualiza la librería “Utilidades fechas” a v2.0. Esta es aún peor porque tanto “Librería Notas” como “Librería Adjuntos” dependen de ella.

programacion-dependencias-3

Así que tienes que actualizar ambas, y tu aplicación. Que ya va por la versión v3.0. O incluso por la v4.0, si tus librerías no se han actualizado.

El problema de las dependencias

Creo que ya se ve el problema. Cada vez que se actualiza a una dependencia, toda la “cadeneta” de librerías que lo montan a tu aplicación, debe aumentar de versión. Lo cuál es jodidamente horrible.

Por supuesto, podrías decir “bueno, pues no actualizo, me quedo con la versión vieja”. Ya, pero ¿cuanto tiempo va a pasar hasta que otra de la librería que montas, sí se actualice? Y entonces… ¡catapum! 💥

Recordemos que esto es un ejemplo muy sencillo con sólo cuatro dependencias, en dos niveles. Pero en un proyecto fácilmente podrías irte a cientos o miles de dependencias y decenas de niveles.

Con esto que depende de esto, eso que también ¡Un pollo del copón! Al final, si no gestionas las dependencias puedes acabar con un enorme problema.

Las dependencias son malvadas

Entonces que hacemos. ¿Evitamos las dependencias entre librerías? No, tampoco es tanto. De hecho ya he dicho que es prácticamente imposible hacer un programa sin tener dependencias.

Pero lo que sí que tenéis que tener siempre en cuenta es que:

  • Cuantas menos dependencias mejor
  • Debes tenerlas controladas
  • A la hora de actualizar, puede ser un quebradero de controladas

Para evitar estos problemas, se han creado muchas herramientas. Algunas de las cuales son, los gestores de paquetes, los sistemas de versionado, e incluso el control de código fuente.