una remediación oyarzun minería mineria minera minas medio los libros libro introducción impactos geologia explotacion ecologica cientifico articulo ambiente ambiental design-patterns dependency-injection inversion-of-control

design patterns - remediación - ¿Cómo explicar la inyección de dependencia a un niño de 5 años?



mineria y medio ambiente pdf (5)

¿Cuál es una buena manera de explicar la inyección de dependencia ?

Encontré varios tutoriales en Google, pero ninguno de ellos supondría que el lector es solo un principiante de Java. ¿Cómo le explicarías esto a un novato?


Al escribir una clase, es natural que haga uso de otros objetos. Puede tener una conexión de base de datos, por ejemplo, o algún otro servicio que utilice. Estos otros objetos (o servicios) son dependencias. La forma más sencilla de escribir el código es simplemente crear y utilizar esos otros objetos. Pero esto significa que su objeto tiene una relación inflexible con esas dependencias: no importa por qué invoque su objeto, usa las mismas dependencias.

Una técnica más poderosa es poder crear su objeto y proporcionarle dependencias para usar. Por lo tanto, puede crear una conexión de base de datos para usar y luego entregarla a su objeto. De esta manera, puede crear su objeto con diferentes dependencias en diferentes momentos, haciendo que su objeto sea más flexible. Esta es la inyección de dependencia, donde se "inyectan" las dependencias en el objeto.

Por cierto: en el estilo de presentación moderno del uso de fotos de flickr para ilustrar conceptos, esto podría ilustrarse con un adicto que se inyecta drogas. Oh, espera, eso es dependencia de la inyección ... Está bien, lo siento, mala broma.


Cuando te dan un nuevo Nintendo, puedes usar los botones y la pantalla táctil para jugar.

Pero en la fábrica de Nintendo, necesitan saber cómo armar una.

Cuando la gente inteligente de la fábrica saque un Nintendo DS, será diferente por dentro, pero todavía sabrás cómo usarlo.


No conozco ningún tutorial simplificado, pero puedo ofrecerte una versión de casi 2500 palabras o menos:

Con la inyección de dependencia, un objeto no configura sus propios componentes basándose en cosas que ya sabe, sino que el objeto se configura mediante una lógica de nivel superior y luego llama a componentes de los que no tenía conocimiento previo incorporado. La idea es hacer que el objeto sea más un componente y menos una aplicación, reubicando las tareas de configuración en un nivel superior. Esto hace que sea más probable que el objeto sea útil en el futuro o con una configuración diferente.

Es mejor para las pruebas, es mejor cuando llega el momento de revisar la aplicación. Una implementación típica coloca la configuración en XML y utiliza un marco para cargar clases de forma dinámica.


Que hay de esto

Si tiene un Employee clase y este empleado tiene una Address , puede definir la clase de Employee siguiente manera:

class Employee { private Address address; // constructor public Employee( Address newAddress ) { this.address = newAddress; } public Address getAddress() { return this.address; } public void setAddress( Address newAddress ) { this.address = newAddress; } }

Todo se ve bien hasta ahora.

Este código muestra una relación de HAS-A entre el empleado y su dirección, eso está bien.

Ahora, esta relación HAS-A creó una dependencia entre ellos. El problema viene dentro del constructor.

Cada vez que desee crear una instancia de Employee , necesita una instancia de Address :

Address someAddress = .... Employee oscar = new Employee( someAddress );

Trabajar de esta manera se vuelve problemático, especialmente cuando desea realizar pruebas de unidad.

El principal problema surge cuando necesita probar un objeto en particular, necesita crear una instancia de otro objeto y lo más probable es que necesite crear una instancia de otro objeto para hacer eso. La cadena puede volverse inmanejable.

Para evitar esto, podrías cambiar el constructor de esta manera:

public Employee(){ }

Usando un constructor no args.

Luego puedes establecer la dirección cuando quieras:

Address someAddress = .... Employee oscar = new Employee(); oscar.setAddress( someAddress );

Ahora, esto puede ser un arrastre, si tiene varios atributos o si los objetos son difíciles de crear.

Sin embargo, piense en esto, digamos, agrega el atributo Department :

class Employee { private Address address; private Department department; ....

Si tiene 300 empleados, y todos ellos necesitan tener el mismo departamento, y además ese mismo departamento debe compartirse entre otros objetos (como la lista de departamentos de la compañía, o los roles que cada departamento tiene, etc.), entonces tener dificultades con la visibilidad del objeto del Department y compartirlo a través de toda la red de objetos.

En qué consiste la Inyección de Dependencias para ayudarlo a, además, "inyectar" estas dependencias en su código. La mayoría de los marcos le permiten hacer esto especificando en un archivo externo, qué objeto se va a inyectar.

Supongamos un archivo de propiedades para un inyector de dependencia ficticio:

#mock employee employee.address = MockAddress.class employee.department = MockDepartment.class #production setup employee.address = RealAddress.class employee.department = RealDepartment.class

Definirás qué inyectar para un escenario dado.

Lo que hará el marco del inyector de dependencia es establecer los objetos correctos para usted, de modo que no tenga que codificar setAddress o setDepartment . Esto se haría ya sea por reflexión o por generación de código u otras técnicas.

Por lo tanto, la próxima vez que necesite probar la clase de Employee , puede inyectar objetos de Address y Departments simulados sin tener que codificar todo el conjunto / obtención para toda su prueba. Aún mejor, puede inyectar objetos reales de Address y Department en el código de producción, y aún así tener la confianza de que su código funciona como probado.

Eso es bastante sobre eso.

Aún así, no creo que esta explicación sea adecuada para un niño de 5 años como usted lo solicitó.

Espero que todavía lo encuentres útil.


Te doy inyección de dependencia para niños de cinco años.

Cuando vas y sacas cosas del refrigerador por ti mismo, puedes causar problemas. Podría dejar la puerta abierta, podría obtener algo que mamá o papá no quieren que usted tenga. Puede que incluso esté buscando algo que ni siquiera tenemos o que haya caducado.

Lo que debe hacer es expresar una necesidad: "Necesito algo de beber con el almuerzo", y luego nos aseguraremos de que tenga algo cuando se siente a comer.