Si bien estoy de acuerdo con usted con el ejemplo DB, una de las grandes cosas que encontré útil para usar DI es ayudarme a probar la capa que construyo en la parte superior de la base de datos.
He aquí un ejemplo ...
Usted tiene su base de datos.
Usted tiene su código que accede a la base de datos y devuelve objetos
tiene objetos de dominio de negocio que tienen los objetos del elemento anterior y hacer algo de lógica con ellos.
Si combina el acceso a los datos con la lógica del dominio de su empresa, los objetos de su dominio pueden ser difíciles de probar. DI le permite inyectar sus propios objetos de acceso a datos en su dominio para que no dependa de la base de datos para probar o posiblemente realizar demostraciones (ejecutó una demostración donde se extrajeron algunos datos de xml en lugar de una base de datos).
Resumiendo componentes de terceros y marcos como este también te pueden ayudar.
Aparte del ejemplo de prueba, hay algunos lugares donde DI se puede utilizar a través de un enfoque de diseño por contrato. Puede encontrar apropiado crear un tipo de motor de procesamiento que invoca métodos de los objetos que está inyectando en él. Si bien no puede realmente "procesarlo", ejecuta los métodos que tienen una implementación diferente en cada objeto que usted proporciona.
Vi un ejemplo de esto donde el objeto de dominio de todos los negocios tenía una función "Guardar" que se llamaba después de haber sido inyectado en el procesador. El procesador modificó el componente con información de configuración y Save manejó el estado primario del objeto. En esencia, DI complementó la implementación del método polimórfico de los objetos que se ajustaban a la interfaz.
Me gustan todas tus razones hasta ahora ... Entiendo que son los programadores veteranos los que "obtienen" DI. Según entiendo, DI se trata de calidad. Nosotros, como programadores, queremos producir el mayor nivel de software que podamos, y probarlo ayuda. He escrito MUCHO código a lo largo de los años, y me complace decir que 10 años pasados, más del 50% sigue funcionando ... y eso sin DI. Tal vez eso te ayude a entender por qué estoy un poco reservado sobre DI. – CodeMonkey
Obviamente DI es relativamente nuevo. Así que, por supuesto, puede escribir software de alta calidad sin él, pero con el avance de cosas como los frameworks de prueba y TDD, DI puede hacer que sea mucho más fácil escribir pruebas y escribir código que pueda mantenerse para el futuro (acoplamiento). – digiarnie