http://fabiokung.com/2010/05/06/ruby-and-dependency-injection-in-a-dynamic-world/: esta es otra, el artículo mucho menos dogmático que el artículo de James Buck. La conclusión es que no necesita inyección de dependencia porque Ruby ofrece muchas buenas alternativas que funcionan igual de bien y que realmente no existen en el mundo de Java.
Una de esas alternativas es mixins, que es algo de Java no tiene y la otra es la capacidad de anular/redefinir casi cualquier cosa en el lenguaje. Otras características incluyen el tipado dinámico en el que básicamente puede enviar cualquier mensaje a cualquier objeto y si proporciona una implementación para ese mensaje, las cosas simplemente funcionan. Todas estas cosas trabajan juntas para eliminar gran parte de la necesidad de un marco DI. El patrón de diseño como tal también sigue siendo válido en Ruby y, a veces, tiene sentido usarlo.
Otro punto sobre DI que Alexey Petrushin también menciona es que la inyección de dependencia es principalmente un patrón de diseño y que las herramientas son secundarias y sobre todo para deshacerse de la tediosidad de ciertas cosas en Java. En ruby, puedes simular trivialmente la mayor parte de lo que Spring o Guice hacen por ti en Java.Entonces, un marco completo de inyección de dependencias es esencialmente redundante en Ruby.
Dicho esto, a veces tener un marco de DI es algo bueno, ya que en última instancia, puede quitarle parte de la tediosidad del cableado. No puedo dar fe de ningún marco de DI específico de Ruby, pero conozco muchos proyectos de Ruby que finalmente se reescribieron en otro idioma (Java incluso) porque la naturaleza de los juegos hace que las cosas se vuelvan difíciles de mantener. Sospecho que esto tiene mucho que ver con que los desarrolladores se peguen un tiro en el pie con las diversas y poderosas características del lenguaje. Tener un marco de DI impone un poco de estructura y modismos que pueden ayudar a prevenir esto.
Pude ver esta charla en persona en RubyConf el pasado fin de semana, hizo un trabajo tan fantástico. En pocas palabras, no necesita inyección de dependencia en Ruby. – mwilliams
El artículo no dice que no se debe usar la inyección de dependencia, sino que se dice que no se necesita un marco DI. Aquí hay otra cita del artículo, "Entonces, ¿no hay espacio para DI en Ruby? Definitivamente lo es. Uso DI casi todos los días en Ruby, pero no uso un marco DI. Ruby tiene suficiente poder para representar cualquier día. -diomas DI diarios que necesitas ". –
Solo quiero señalar que * DI Frameworks * no son necesarios en Ruby, pero el paradigma * DI * no debe ignorarse. –