Qué es una dependencia en Java

Clase 6 de 31Curso de Java: Backend con Spring Boot

Contenido del curso

JPA con Spring y Spring Data

Resumen

Comprender qué es una dependencia resulta fundamental para diseñar aplicaciones Java robustas y fáciles de mantener. Una dependencia no es más que un pequeño objeto con una funcionalidad específica que trabaja junto a otros objetos para cumplir un propósito mayor. Este concepto conecta directamente con la modularización en programación orientada a objetos y sienta las bases para patrones avanzados como la inyección de dependencias.

¿Qué es una dependencia y cómo se relaciona con la modularización?

Una dependencia se define como una pequeña característica de un objeto específico [0:11]. El término proviene de la modularización: cada módulo tiene una funcionalidad propia y se relaciona con otros módulos a través de sus dependencias para lograr un objetivo común.

En aplicaciones Java, esto se traduce en tener múltiples dependencias —por ejemplo, una dependencia X, una dependencia Y y una dependencia Z— que interactúan entre sí para construir la funcionalidad que estamos programando [0:44].

Para ilustrar este concepto de forma sencilla, se puede pensar en un carro como una aplicación cuyo objetivo principal es moverse [1:02]. Ese carro posee varias características que equivalen a dependencias:

  • Rueda: permite el desplazamiento.
  • Parachoques: protege la estructura.
  • Portón y puerta: dan acceso al interior.
  • Motor: genera la potencia necesaria.

Todas estas características se interrelacionan para cumplir el objetivo principal: movernos. Además, no todas las dependencias tienen el mismo peso. Una rueda tiene mayor impacto que una puerta dentro del funcionamiento del carro [1:30]. Lo mismo ocurre en aplicaciones Java: algunas dependencias son más críticas que otras, pero todas colaboran para alcanzar el resultado esperado.

¿Por qué las dependencias mejoran la calidad del software?

Cuando diseñamos una arquitectura basada en dependencias bien definidas, obtenemos un beneficio directo en las pruebas unitarias [1:53]. Al modularizar el programa, cada dependencia puede probarse de manera individual. Por ejemplo, se puede verificar que la rueda esté en perfecto estado, que tenga el color correcto o que frene adecuadamente, sin necesidad de probar todo el carro al mismo tiempo.

Esta capacidad de probar componentes por separado eleva la calidad del código y reduce el riesgo de errores ocultos.

¿Cómo se conectan las dependencias con el principio SOLID?

El diseño basado en dependencias se relaciona estrechamente con el principio de responsabilidad única del acrónimo SOLID [2:10]. Cada componente tiene una sola responsabilidad:

  • La rueda se encarga exclusivamente de rodar.
  • La puerta se encarga exclusivamente de dar acceso.
  • El motor se encarga exclusivamente de generar potencia.

Aunque cada pieza cumple una única función, todas se interrelacionan formando un sistema con alta cohesión [2:28]. Esto significa que los componentes están fuertemente conectados en propósito, pero débilmente acoplados en implementación. Esta cualidad resulta esencial cuando se trabaja con el patrón de inyección de dependencias, un tema que se aborda junto con la inversión de control en lecciones posteriores [2:38].

¿Qué diferencia hay entre inversión de control e inyección de dependencias?

Si bien ambos conceptos se relacionan, son completamente diferentes [2:50]. La inversión de control es un principio de diseño, mientras que la inyección de dependencias es un patrón que implementa dicho principio. Comprender primero qué es una dependencia permite asimilar con mayor claridad cómo estos mecanismos gestionan la creación y el suministro de objetos dentro de una aplicación Java.

Dominar estos fundamentos te permitirá escribir código más limpio, testeable y alineado con buenas prácticas de arquitectura. Si tienes dudas sobre cómo aplicas las dependencias en tus proyectos, comparte tu experiencia en los comentarios.