La inyección de dependencias (DI) en Ruby ha sido históricamente evitada por los desarrolladores debido a la percepción de complejidad innecesaria. Sin embargo, la flexibilidad del lenguaje permite implementar este patrón de manera más natural que en otros lenguajes como Java. El documento explica cómo la DI resuelve problemas de mantenibilidad y pruebas, especialmente al desacoplar la lógica de negocio de las implementaciones externas.
El texto contrasta el código tradicional, donde los parámetros se inician como estado de instancia y se discardan inmediatamente, con un enfoque moderno que los trata como dependencias explícitas. Esta distinción es crucial: los argumentos son parámetros de una sola vez, mientras que las dependencias son referencias que pueden reutilizarse. Al declarar las dependencias en el método initialize, se facilita la visualización de las relaciones de coordinación y se permite reemplazarlas por 'doubles' de prueba (test doubles) sin modificar la lógica central. Esto evita que los cambios en librerías externas rompan las pruebas de comportamiento.
Para gestionar la redundancia en clases con muchas dependencias, el artículo introduce el uso de Dry::Initializer y T::Interface. Estas herramientas permiten definir dependencias mediante una DSL (Lenguaje de Dominio Específico) que genera código de inicialización, eliminando la necesidad de repetir argumentos y asignaciones. Este enfoque sistematiza la construcción de objetos, mejorando la legibilidad y la capacidad de reemplazo de dependencias en entornos de producción y pruebas.
