Estoy planeando hacer una charla sobre la inyección de dependencia y los contenedores de IoC, y estoy buscando algunos buenos argumentos para usarlo.
¿Cuáles son los beneficios más importantes de usar esta técnica y estas herramientas?
design-patterns
dependency-analysis
Andy Lowry
fuente
fuente
Respuestas:
Lo más importante, para mí, es facilitar el cumplimiento del Principio de responsabilidad única .
DI / IoC me facilita la gestión de dependencias entre objetos. A su vez, eso me facilita dividir la funcionalidad coherente en su propio contrato (interfaz). Como resultado, mi código se ha modularizado mucho más desde que supe de DI / IoC.
Otro resultado de esto es que puedo ver mucho más fácilmente mi camino hacia un diseño que admita el Principio Abierto-Cerrado . Esta es una de las técnicas más inspiradoras de confianza (solo superada por las pruebas automatizadas). Dudo que pueda defender las virtudes del Principio Abierto-Cerrado lo suficiente.
DI / IoC es una de las pocas cosas en mi carrera de programación que ha sido un "cambio de juego". Hay una gran brecha en la calidad entre el código que escribí antes y después de aprender DI / IoC. Permítanme enfatizar eso un poco más. ENORME mejora en la calidad del código.
fuente
Los ejemplos que realmente me abrieron los ojos fueron ver cómo hacía posible probar fácilmente los objetos creados de esta manera. Antes de eso, tuve problemas para intentar aislar objetos para una prueba unitaria. A menudo escribía pruebas para interactuar con un sistema mucho más grande. Esto fue realmente difícil porque el sistema en su conjunto era mucho menos predecible y mucho más propenso a cambiar que los componentes individuales.
fuente
Las ventajas de las inyecciones de dependencia son:
fuente
Creo que los beneficios reales son más políticos que técnicos. DI es simplemente una alternativa al patrón Localizador de servicios , nada más. Por sí solo, no hace que sea más fácil seguir principios como SRP u OCP, ni desacoplar capas. Otros encuestados aquí están confundiendo diferentes conceptos y técnicas, en mi opinión.
Puede lograr los mismos objetivos con respecto a la alta cohesión y el bajo acoplamiento mediante el uso de localizadores de servicios, o simplemente creando instancias de dependencias directamente cuando corresponda (que es la mayor parte del tiempo).
Ahora, sé que muchos estarán en desacuerdo con esta opinión. Estaré encantado de discutir ejemplos concretos.
fuente
Cuando se usa DI para exponer objetos internos con el propósito de probar, el patrón ha sido abusado.
fuente