Estudiante
Cabrera Huatay, Einer Eduardo
Código: 705395
e-mail: einerc@gmail.com
La programación en sus inicios, los programas eran lineales y monolíticos. El flujo de ejecución era simplemente ejecutar línea tras línea.
Aparecieron dos conceptos que revolucionaron la programación: la modularidad yla reutilización de los componentes: se crean librerías de componentes reutilizables. El flujo se complica, saltando de componente a componente, y aparece un nuevo problema: la dependencia (acoplamiento) entre nuestros componentes.
El problema se empieza a considerar lo suficientemente importante como para definir nuevos conceptos en el diseño:
•Inversion of Control (IoC)
•Dependency Injection(DI)
La utilización de interfaces y la aparición de los FrameWorks es un primer paso para minimizar estas dependencias entre componentes, aunque pagamos un precio: la configuración en ficheros XML se empieza a volver monolítica, difícil de mantener, crítica y es fácil cometer errores.
IoC. La Inversión de Control es un patrón de diseño pensado para permitir un menor acoplamiento entrecomponentes de una aplicación y fomentar así el reúso de los mismos.
Muchas veces, un componente tiene dependencias de servicios o componentes cuyos tipos concretos son especificados en tiempo de diseño.
En el ejemplo de la imagen, clase A depende de ServiceA y de ServiceB.
Los problemas que esto plantea son:
* Al remplazar o actualizar las dependencias, se necesita cambiar el código fuente de laclase A.
* Las implementaciones concretas de las dependencias tienen que estar disponibles en tiempo de compilación.
* Las clases son difíciles de testear aisladamente porque tienen directas definiciones a sus dependencias. Esto significa que las dependencias no pueden ser remplazadas por componentes stubs o mocks.
* Las clases tienen código repetido para crear, localizar y gestionarsus dependencias.
Aquí la solución pasa por delegar la función de seleccionar una implementación concreta de las dependencias a un componente externo.
El control de cómo un objeto A obtiene la referencia de un objeto B es invertido. El objeto A no es responsable de obtener una referencia al objeto B sino que es el Componente Externo el responsable de esto. Esta es la base del patrón IoC.
Elpatrón IOC aplica un principio de diseño denominado principio de Hollywood (No nos llames, nosotros te llamaremos).
Usos
El patrón IoC se puede utilizar cuando:
» Se desee desacoplar las clases de sus dependencias de manera de que las mismas puedan ser remplazadas o actualizadas con muy pocos o casi ningún cambio en el código fuete de sus clases.
* Desea escribir clases que dependan declases cuyas implementaciones no son conocidas en tiempo de compilación.
* Desea testar las clases aisladamente sin sus dependencias.
* Desea desacoplar sus clases de ser responsables de localizar y gestionar el tiempo de vida de sus dependencias.
Técnicas de implementación
Según diversos enfoques, este patrón puede implementarse de diversas maneras. Entre las más conocidastenemos:
* Inyección de dependencias
* Service Locator
Service Locator
Un Service Locator es un componente que contiene referencias a los servicios y encapsula la lógica que los localiza dichos servicios. Así, en nuestras clases, utilizamos el Service Locator para obtener instancias de los servicios que realmente necesitamos.
El Service Locator no instancia los servicios. Provee una manerade registrar servicios y mantener una referencia a dichos servicios. Luego de que el servicio es registrado, el Service Locator puede localizarlo.
El Service Locator debe proveer una forma de localizar un servicio sin especificar el tipo. Por ejemplo, puede usar una clave string o el tipo de interface. Esto permite un fácil remplazo de la dependencia sin modificar el código fuente de la clase....
Regístrate para leer el documento completo.