Mostofreddy

lightDI – Light Injection Dependency Framework

Comentarios 0 Tags , Categorias Programacion

{lang: 'es-419'}

Muuuucho tiempo sin postear, hoy vuelvo con un proyectito que estoy realizando y que ya forma parte de FlyPHP

LightDI es un pequeño framework de Inyección de Dependencias realizado en PHP 5.3+ que permite ser integrado en cualquier proyecto (o framework como por ejemplo Zend) de forma rápida y sencilla.

¿Injection Dependency?

En forma resumida (porque en google encontramos miles de artículos que explican muy bien) la Inyección de Dependencia (en inglés Dependency Injection, DI) es un patrón de diseño orientado a objetos, en el que se inyectan objetos a una clase en lugar de ser la propia clase quien cree el objeto.
Existen 3 tipos de inyeccion de dependencias

  • por constructor
  • por setter
  • por interfaz

lightDI al rescate =)

LightDI permite realizar inyección de clases por constructor y por setter mediante los metodos “any” o “factory”. El primero funciona al estilo Singleton, o sea, la primera invocación a un objecto lo instancia y guarda su referencia para las posteriores invocaciones no tener que instanciarlo nuevamente. El segundo devuelve siempre una instancia nueva del objeto pedido.

El metodo “any” es de mucha utilidad para controlar el ciclo de vida de los objetos y la cantidad de instancias de objetos de base de datos, de web service, de sessiones, etc.

Ahora bien, para que estos metodos sepan como construir cada objeto y sus dependencias hay que crear una serie de metodos “factories” con la lógica necesaria para su instanciación. Veamos un ejemplo:

$inj = \LightDI\Injector::getInstance();
/**
 * Factory para la clase ClaseDemo2
 */
$inj->claseDemo2 = function () {
    $obj = new ClaseDemo2();
    $obj->dato = 'm2';
    return $obj;
};
/**
 * Factory para la clase ClaseDemo1
 */
$inj->claseDemo1Factory = function ($inj) {
    //primero creamos la dependencia y se la pasamos al constructor
    $objDemo2 = $inj->any('ClaseDemo2');
    $obj = new ClaseDemo1($objDemo2);
    return $obj;
};

Como vemos en el ejemplo, la logica para la instanciación de cada clase se define mediante funciones lambdas. Luego para invocarlas

$objTest = $inj->any('claseDemo1Factory');
var_dump($objTest);

En posteriores post ire profundizando un poco mas sobre este framework. Espero que les sea útil.

0 comentarios - 0 pingbacks

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Enviar Comentario
Se el primero en comentar!