Sobes.tech
Junior

¿Qué es la inyección de dependencias (DI)?

sobes.tech AI

Respuesta de la IA

La inyección de dependencias (DI) es un patrón de diseño en el que las dependencias de un componente se proporcionan desde fuera, en lugar de ser creadas por él mismo. Esto permite una mayor flexibilidad, facilidad de prueba y mantenibilidad del código.

Principios básicos:

  • Inversión de control (IoC): El componente no gestiona la creación de sus dependencias.
  • Separación de responsabilidades: La creación de dependencias está separada de su uso.

Ventajas de DI:

  • Mejorabilidad en las pruebas: Es fácil sustituir dependencias reales por mocks en pruebas.
  • Reducción del acoplamiento: Los componentes son menos dependientes entre sí.
  • Mayor flexibilidad y reutilización: Es fácil cambiar la implementación de una dependencia sin modificar el código del componente.
  • Gestión simplificada de dependencias: Especialmente en proyectos grandes.

Formas de implementar DI en Android:

  1. Manual (DI manual): Las dependencias se pasan en el constructor o mediante setters.
  2. Usando frameworks: Dagger 2, Hilt, Koin. Estos frameworks automatizan el proceso de creación y provisión de dependencias.

Ejemplo manual:

// Dependencia
interface AnalyticsManager {
    fun trackEvent(eventName: String)
}

// Implementación de la dependencia
class FirebaseAnalyticsManager : AnalyticsManager {
    override fun trackEvent(eventName: String) {
        // Lógica de seguimiento en Firebase
    }
}

// Componente que necesita la dependencia
class UserRepository(private val analyticsManager: AnalyticsManager) { // La dependencia se pasa a través del constructor
    fun getUser(userId: String): User? {
        analyticsManager.trackEvent("UserFetched")
        // Lógica para obtener el usuario
        return null
    }
}

// Lugar donde se crean y enlazan los objetos
fun main() {
    val analytics: AnalyticsManager = FirebaseAnalyticsManager()
    val userRepository = UserRepository(analytics) // Inyección de dependencia
}