Os programadores Ruby (e outra linguagem dinâmica) usam IoC / Injection Dependency?

8

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?

richeym
fonte

Respostas:

6

Inversão de controle ainda é um conceito que se aplica bem. Você não precisa fazer injeção de dependência para aplicar a IoC, embora no .NET elas tendam a andar juntas com frequência.

A grande motivação por trás da injeção de dependência no .NET está evitando dependendo de implementações concretas. No Ruby, como você mencionou, as coisas são muito mais abertas e você pode substituir a implementação de uma classe em tempo de execução; portanto, há muito menos necessidade de criar "interfaces" e injetar explicitamente dependências.

Pode-se argumentar que interfaces e IoC / DI também não são estritamente necessárias no .NET (mesmo quando se trata de testes - existem estruturas de simulação que permitirão eliminar a necessidade de fazer a interface de tudo sob o sol), mas é mais pronunciado em Ruby.

Adam Lear
fonte
4

A injeção de dependência é menos importante em idiomas dinâmicos, porque eles são dinâmicos - você pode alterar seu código sempre que quiser, para não ter que planejar com antecedência possíveis alterações em dependências. Existem maneiras mais fáceis de obter a IoC em um idioma como Ruby.

Fabio Kung sobre esse assunto, que se refere a Jamis Buck sobre a mesma coisa - eles dão um pouco de profundidade.

glenatron
fonte