Inyección de dependencias


La inyección de dependencias (o dependency injection) es una técnica ampliamente usada en programación, es fundamental para tener una arquitectura bien estructurada.

Provee de las siguientes ventajas:

  • Reutilización del código
  • Facilidad de refactorización
  • Facilidad de testeo
Cuando instancias una clase normalmente requieres del uso de objetos instanciados de otra clase, por ejemplo, si instancias una clase CuerpoHumano necesitarás de la clase Cabeza para poder hacerlo. La clase CuerpoHumano tiene la dependencia de Cabeza para poder funcionar.

Hay tres maneras de solucionar esta dependencia:
  1. La clase CuerpoHumano dentro de su código instancia la clase Cabeza.
  2. Conseguimos el objeto instanciado de la clase Cabeza vía API del sistema o cualquier otro método alternativo.
  3. Instanciamos la clase CuerpoHumano con el objeto instanciado de la clase Cabeza en los parámetros.
La última opción es la utilizada por la inyección de dependencias. De esta manera provees la dependencia a la clase y esta no la tiene que buscar por sus propios medios.


Os pongo un ejemplo con Kotlin:

class HumanBody(private val head: Head) {
    fun start() {
        head.start()
    }
}

fun main(args: Array) {
    val head = Head()
    val humanBody = Car(head)
    humanBody.start()
}

En el caso concreto de Android para evitar tener que crear demasiado código boilerplate existen inyectores de dependencias como dagger que te hacen la vida más cómoda.

Espero que os haya sido de utilidad ^_^.

Comentarios