Para hablar de jerga, la inversión de control es un patrón que admite, entre otras cosas, el principio de responsabilidad única.
Para entender por qué todo esto es útil, necesitas algo de exposición, así que ten paciencia conmigo.
La responsabilidad única básicamente significa que su clase debe ser tan independiente de otras partes del sistema como sea posible, para minimizar el impacto de cambiar una parte en la otra. (También puede vincular eso al hecho de que cambiar la implementación no debe desencadenar la recompilación de todos los archivos en sus proyectos, como es el caso al cambiar los archivos .h en un proyecto C/C++, por ejemplo). El efecto secundario es que termina con muchos objetos pequeños que hacen una sola cosa, pero muy bien (en un mundo ideal)
Pero en la mayoría de los casos, para llevar a cabo su trabajo, un objeto necesita hablar con otro objeto: depende de ellos.
Primera parte de la mitigación que separa la implementación de las interfaces. Eso significa confiar en interfaces (o clases abstractas, dependiendo de su idioma de elección), de modo que un objeto no esté vinculado a la implementación específica de otro.
, a utilizar un ejemplo canónico, en las necesidades de la capa de negocio, es necesario llevar a cabo una función que necesita acceso a - La capa de datos para recuperar objetos - algún otro servicio - un registrador para registrar información y o errors
A su vez, cada servicio o dependencia tiene sus propias dependencias, que su clase debería tener en cuenta incluso si no las usa. Según la cantidad de referencias, la configuración del objeto puede salirse de control rápidamente. Ahora multiplique eso por la cantidad de clases que necesita escribir y terminará con un caos de cosas.
El uso de un contenedor de COI básicamente le ayuda a deshacerse de ese lío. Cuando necesita un objeto, no lo "actualiza". En su lugar, le pide al contenedor del COI que lo recupere por usted. El contenedor es responsable de entregar un objeto funcional, listo para ser usado, cualquiera que sean sus dependencias.
Lo que significa es que su clase no necesita conocer las dependencias de las clases en las que se basa, lo que reduce el enredo. Además, no necesita saber qué clase real implementa los servicios de los que depende, lo que significa que - La implementación del servicio se puede definir en otro proyecto (dll o lo que sea), por lo que modificarlo nunca afectará su clase - La implementación puede ser diferente según el contexto (piense en cambiar la base de datos, o incluso en ir a un servicio web para recuperar información según la configuración o incluso el estado actual de la aplicación).
Para intentar responder a sus otras preguntas, IOC es un patrón. TDD y DDD son metodologías de diseño, por lo tanto, uno no puede igualar al otro. Pero IOC es una herramienta invaluable para admitir TDD o DDD.
Sé que la sopa de acrónimos y las muestras parciales que puede encontrar no son fáciles de asimilar. El mejor consejo que puedo darte es probar algunos proyectos pequeños, prototipos que vas a descartar, solo para manejarlos. No es una forma fácil de hacerlo si lo buscas para el trabajo, pero vale la pena, aunque solo sea desde un punto de vista personal.
Espero que ayude un poco.
COI como en Inversión de Control - El patrón de diseño? – dirkgently