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