Documentos de Académico
Documentos de Profesional
Documentos de Cultura
DEPENDENCIA
S EN JAVA
INTEGRANTES:
Ariza Jhon Alexander
Cruz Pachón Jose Efrain
Gaona Yesicarolina
Gonzalez Kevin Andres
Osorio Chaparro Daisy Paola
Parraga Garcia Brayan Nicolas
Romero Ascanio Kristian David
INYECCIÓN DE DEPENDENCIAS EN JAVA
La inversión de dependencias describe un conjunto de técnicas destinadas a disminuir el acoplamiento entre los
componentes de una aplicación. Es uno de los principios SOLID más populares y utilizados en la creación de
aplicaciones, frameworks y componentes por las ventajas que aporta a las mismas. También se conoce como
inversion de control. En inglés, los términos más frecuentemente utilizados son "dependency inversion", abreviado
como "DI", e "inversion of control" o simplemente "IoC".
La inyección de dependencias es una de las técnicas utilizadas para implementar el principio de inversión de
dependencias.
Java es un lenguaje orientado a objetos, Al igual que cualquier otro lenguaje orientado a objetos, las clases y los
objetos son la base de cualquier funcionalidad que podamos escribir y usar. Las relaciones entre las clases y/u
objetos permiten ampliar y reutilizar la funcionalidad
¿QUÉ ES UNA
DEPENDENCIA
?
Cuando una clase ClassA usa cualquier método de otra claseClassB, podemos decir
que ClassB es una dependencia deClassA.
En este ejemplo, ClassA está calculando el 10% del valor, y
calculando ese valor, está reutilizando la funcionalidad expuesta
porClassB.
03 04
INYECCIÓN CON FIELDS
LA APLICACIÓN DE
TAREAS (TODO'S APP)
INYECCIÓN CON SETTERS (NO RECOMENDADO)
El ejemplo anterior es mejor que el enfoque inicial porque ahora podemos inyectar en ClassA una instancia de ClassB o incluso
mejor, una subclase deClassB:
El ejemplo anterior es mejor que el enfoque inicial porque ahora podemos inyectar en ClassA una instancia de ClassB o incluso
mejor, una El problema es con el enfoque de Inyección con Setters:
Estamos ocultando la dependencia ClassB en ClassA porque al leer la firma del constructor, no podemos identificar sus
dependencias de inmediato. El siguiente código provoca una NullPointerException en tiempo de ejecución:
En un lenguaje de tipo estático como Java, siempre es bueno dejar que el compilador nos ayude. Ver Inyección con
Constructor
INYECCIÓN CON CONSTRUCTOR (ALTAMENTE
RECOMENDADO)
VENTAJAS:
• La funcionalidad permanece intacta en comparación con
el enfoque de Inyección Setter.
• Eliminamos la inicialización nueva de la ClaseA.
• Todavía podemos inyectar una subclase especializada de
ClassB a ClassA.
• Ahora el compilador nos pedirá las dependencias que
necesitamos en tiempo de compilación.
INYECCIÓN CON FIELDS
Otra forma de inyectar dependencias en Java, y se llama Inyección con Fields. La única manera de que funcione la inyección
de campo es:
Este enfoque tiene los mismos problemas expuestos por el enfoque de Inyección con Setters y además agrega complejidad
debido a la mutación / reflexión requerida. Desafortunadamente, este es un patrón bastante común cuando las personas usan
un Framework de inyección de dependencias.
NOTA:
Cuando una clase ClassA usa cualquier método de otra clase ClassB podemos decir que ClassB es una dependencia de
ClassA.
Si ClassA tiene una dependencia de ClassB, el constructor ClassA debería requerirClassB.
LA APLICACIÓN DE TAREAS (TODO'S APP)
Diseñemos una aplicación de Todo para realizar operaciones CRUD (Crear, Leer, Actualizar, Eliminar)
para administrar nuestra lista de tareas, y una arquitectura original puede ser así:
• TodoApp es la clase principal que va a inicializar nuestra aplicación; Puede ser una aplicación de
Android, una página web o una aplicación de escritorio con cualquier marco.
• TodoView es la clase que mostraría una vista para interactuar, esta clase va a delegar los aspectos
relacionados con los datos alTodoHttpClient. Su única responsabilidad es pintar / dibujar / renderizar la
información y obtener la entrada para realizar acciones contra los datos utilizando la dependencia
TodoHttpClient.
• TodoHttpClient es la clase que contiene un conjunto de métodos HTTP para persistir objetos Todo
utilizando una API REST.
• Todo es un objeto de valor que representa un elemento de todo en nuestro almacén de datos.
GRACIAS