Hablar sobre la inyección de dependencia
En la programación orientada a objetos, el problema con el que a menudo tratamos es el desacoplamiento. Cuanto menor sea el acoplamiento del programa indica la legibilidad y la mantenimiento del programa. La inversión de control (inversión de control o COI) es un principio de diseño comúnmente utilizado de la programación orientada a objetos. Usando este principio podemos reducir el acoplamiento. Entre ellos, la inyección de dependencia es la implementación más utilizada de inversión de control.
¿Qué es la dependencia?
La dependencia es un fenómeno común en los programas. Por ejemplo, la energía de instancia de la clase GaseNergy se usa en Class Car. La práctica habitual es crear explícitamente una instancia de la clase GaseNergy en la clase de automóvil y asignarla a la energía. Como se muestra en el siguiente código
Interface Energy {} Class GaseNergy implementa Energy {} Class Car {Energy Energy = New GaseNergy ();}Hay problemas
Los autos de clase asumen responsabilidades innecesarias y son responsables de la creación de objetos de energía, que inevitablemente tiene un acoplamiento grave. Para dar un ejemplo realista, es responsabilidad del automóvil usar qué energía usa un automóvil no depende del automóvil, sino del fabricante del automóvil.
Escalabilidad. Suponiendo que queremos modificar la energía a la energía eléctrica, entonces debemos modificar la clase de automóvil, lo que obviamente no cumple con el principio del cierre abierto.
No es propicio para las pruebas unitarias.
Inyección de dependencia
La inyección de dependencia es un comportamiento así. En el automóvil de clase, el objeto GaseNergy no se crea activamente, pero la dependencia se establece pasándolo en la forma del objeto de gasEnergia externamente. Hay tres métodos comunes de inyección de dependencia.
Inyección de constructor
Pase la dependencia requerida como parámetros del constructor para completar la inyección de dependencia.
COCHO CLASE {Energy Menergy; auto público (energía energética) {menergy = energía; }}Inyección del método de setter
Agregue el método Setter, el parámetro es la dependencia que debe inyectarse y la inyección de dependencia se puede completar.
COCHO CLASE {Energy Menergy; public void setEnergy (Energy Energy) {menergy = Energy; }}Inyección de interfaz
La inyección de interfaz es evidente, es crear un conjunto de interfaces para la inyección de dependencia, y la dependencia se pasa como parámetros, y la inyección de dependencia a la implementación específica se completa llamando a una interfaz unificada.
Interface EnergyConsumerInterface {public void setEnergy (Energy Energy);} El automóvil de clase implementa EnergyConsumerInterface {Energy Menergy; public void setEnergy (Energy Energy) {menergy = Energy; }}La inyección de la interfaz es similar a la inyección del método Setter, la diferencia es que la inyección de interfaz utiliza un método unificado para completar la inyección, mientras que el nombre del método de la inyección del método setter es relativamente informal.
Compensaciones de marco
Hay muchos marcos para la inyección de dependencia, el más famoso es Guice. Por supuesto, Spring también admite la inyección de dependencia. Guice utiliza anotaciones de lectura en tiempo de ejecución, genera dependencias y las inyecta a través de la reflexión. Este formulario no es muy adecuado para dispositivos móviles de Android. Después de todo, estas operaciones se procesan en tiempo de ejecución y tienen requisitos de alto rendimiento.
Dagger es una biblioteca de inyección de dependencia adecuada para el desarrollo de Android. También usa la forma de anotaciones de clase. La diferencia es que genera clases auxiliares en el momento de la compilación y espera hasta que las clases auxiliares generadas se usen para completar la inyección de dependencia en el tiempo de ejecución.
Usar o no
De hecho, si usar o no usar el marco es un problema. Si usa el marco, todos en el equipo deben seguir las instrucciones de escribir código para resolver la inyección de dependencia. Estos marcos no son fáciles de comenzar, y los coeficientes de aprendizaje son relativamente complejos y difíciles de dominar, lo cual también es un problema que debe considerarse.
Mi opinión personal es que no recomendamos ni nos oponemos al uso de estos marcos, pero siento que a veces esperamos un marco, por lo que es mejor prestar atención a estos problemas en nuestra vida diaria. ¿No es la evitación artificial también un requisito básico para nosotros?
Búsqueda de dependencia
La búsqueda de dependencia es la implementación específica del principio de inversión de control, a diferencia de la aceptación pasiva de la inyección de dependencia, la búsqueda de dependencia es una solicitud activa. Cuando es necesario, el objeto se obtiene llamando a los métodos proporcionados por el marco. Al obtener, se requieren rutas de archivo de configuración relevantes, claves y otra información para determinar el estado del objeto que se está obteniendo.
Lo anterior es una introducción detallada a la información sobre la inyección de dependencia. Continuaremos agregando información relevante en el futuro. ¡Gracias por su apoyo a este sitio!