¿Cuáles son los beneficios de usar Dependency Injection y IoC Containers?

58

Planeo hacer una charla sobre Dependency Injection y IoC Containers, y estoy buscando algunos buenos argumentos para usarlo.

¿Cuáles son los beneficios más importantes de usar esta técnica y estas herramientas?

    
pregunta Andy Lowry 16.11.2010 - 00:26

5 respuestas

42

Lo más importante, para mí, es facilitar el seguimiento del Principio de responsabilidad única .

DI / IoC me facilita la gestión de dependencias entre objetos. A su vez, eso hace que sea más fácil para mí romper la funcionalidad coherente en su propio contrato (interfaz). Como resultado, mi código ha sido mucho más modular desde que me enteré de DI / IoC.

Otro resultado de esto es que puedo ver mucho más fácilmente a través de un diseño que admite el Principio Abierto-Cerrado . Esta es una de las técnicas más inspiradoras de confianza (en segundo lugar solamente a las pruebas automatizadas). Dudo que pudiera 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". Existe una brecha enorme en la calidad entre el código que escribí antes de & después de aprender DI / IoC. Déjame enfatizar eso un poco más. ENORME mejora en la calidad del código.

    
respondido por el quentin-starin 16.11.2010 - 00:30
8

Los ejemplos que realmente me abrieron los ojos vieron cómo se hizo posible probar fácilmente los objetos creados de esa manera. Antes de eso, tuve problemas para intentar aislar objetos para una prueba de unidad. 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.

    
respondido por el Winston Ewert 16.11.2010 - 05:16
2

Las ventajas de las inyecciones de dependencia son:

  1. Su código es limpio y más legible.
  2. Los códigos están débilmente acoplados.
  3. Más reutilizables ya que las implementaciones están configuradas en el archivo XML, se puede utilizar en un contexto diferente.
  4. El código se puede probar fácilmente con diferentes implementaciones simuladas.
respondido por el Solaimani SA 20.04.2016 - 04:50
1

Creo que los beneficios reales son más políticos que técnicos. DI es simplemente una alternativa al patrón Service Locator , nada más. Por sí mismo, no hace que sea más fácil seguir principios como SRP u OCP, o desacoplar capas. Otros encuestados aquí están confundiendo diferentes conceptos y técnicas, OMI.

Puede lograr los mismos objetivos con respecto a la alta cohesión y el bajo acoplamiento mediante el uso de Localizadores de Servicio, o simplemente instanciando dependencias directamente cuando sea aplicable (que es la mayoría del tiempo).

Ahora, sé que muchos estarán en desacuerdo con esta opinión. Estaré encantado de discutir ejemplos concretos.

    
respondido por el Rogério 15.12.2010 - 17:07
-1

Cuando se utiliza DI para exponer objetos internos con el fin de realizar pruebas, se ha abusado del patrón.

    
respondido por el thomas-peter 02.08.2012 - 11:30

Lea otras preguntas en las etiquetas