Sou principalmente um desenvolvedor de ASP.NET e a única coisa que me foi apresentada nos últimos anos que teve o impacto mais dramático na qualidade do código que escrevi ao aprender como usar contêineres IoC para gerenciar dependências entre diferentes camadas do aplicativo com eficiência.
Recentemente, criei meu hobby de aprender Ruby (e Rails) para projetos pessoais, e eu amo o idioma até agora. No entanto, uma das coisas que notei nos vários tutoriais e referências que venho usando é que ainda não houve menção ao uso da IoC. Isso contrasta fortemente com o .NET, onde está (e onde não está) deveria estar inserido nos desenvolvedores desde o início.
Compreendo que uma das razões pelas quais a injeção de dependência possa não ser necessária no Ruby, é que tudo em uma classe é público e virtual, aberto a modificações e, portanto, não é realmente necessário para escrever bons testes de unidade. Mas é claro que existem muitos outros benefícios no uso de contêineres IoC, como as opções de desacoplamento que isso traz, gerenciando a criação e a vida útil do objeto, etc.
A injeção de dependência é usada no Ruby? Caso contrário, por que isso não é um problema?