Inyección de dependencias

Es un patrón de diseño extremadamente sencillo. La inyección de dependencias permite pasar a través del constructor de la clase todos los objetos que necesita una clase para funcionar.

Por ejemplo:

Un móvil depende de una batería para funcionar. Un código sin inyección de dependencias sería así:

<?php
class Mobile {
    public function __construct() {
        $batery = new Batery();
        $batery->isUsable();
    }
}

El problema con la implementación anterior, es que la clase “Batery” se declara implícitamente, no es posible saber que existe dicho objeto hasta inspeccionar código fuente de la clase Mobile. Por lo tanto no solamente la declaración es implícita sino que las clases también están acopladas.

Es decir, no puedes sustituir la clase Batery, por Batery2900mAh o Batery2100mAh sin modificar el código de la clase Mobile. De esta misma manera, la clase se vuelve difícil de mantener y difícil de depurar. Es aquí donde entra en juego la inyección de dependencia, ya que usando este patrón estás haciendo explicita la declaración de la clase y por lo tanto desacoplando Mobile de Batery. El código anterior, cambia a:

<?php

interface Mobile {
    pubic function isUsable();
}

class Batery2900mAh implements Mobile {

    public function isUsable()
    {
        echo "charge me!";   
    }
}

class Batery2100mAh implements Mobile {

    public function isUsable()
    {
        echo "batery charged";   
    }
}

class MobileOwner {
    protected $mobile;

    public function __constructor(Mobile $mobile)
    {
        $this->mobile = $mobile;    
    }

    public function using()
    {
        echo "Im using my mobile phone";
        $this->mobile->using();
    }
}

En los service providers iría el siguiente código, lo que hace posible pasando la interfaz Animal para registrar un nuevo gato por ejemplo.

$this->app->bind('Mobile', function ($app) {
    return new Batery2100mAh;
});

results matching ""

    No results matching ""