¿Los programadores de Ruby (y otros lenguajes dinámicos) usan IoC / Inyección de dependencia?

8

Soy principalmente un desarrollador de ASP.NET y la única cosa que me presentaron en los últimos años que ha tenido el impacto más dramático en la calidad del código que escribo es aprender a usar contenedores IoC para administrar dependencias entre diferentes capas de la aplicación de manera eficiente.

Recientemente he hecho mi hobby aprender Ruby (y Rails) para proyectos personales, y hasta ahora me encanta el idioma. Sin embargo, una de las cosas que he notado en los diversos tutoriales y referencias que he estado usando es que todavía no se ha mencionado el uso de IoC. Esto está en marcado contraste con .NET donde está (y donde no está, debería estar) incluido en los desarrolladores en una etapa temprana.

Aprecio que una de las razones por las cuales la inyección de dependencia puede no ser necesaria en Ruby, es que todo en una clase es público y virtual, por lo que está abierto a modificaciones, por lo que no es realmente necesario para escribir buenas pruebas unitarias. Pero, por supuesto, existen muchos otros beneficios al usar contenedores IoC, como las opciones de desacoplamiento que esto conlleva, la administración de la creación de objetos y la vida útil, etc.

¿Se usa la inyección de dependencia en Ruby? Si no, ¿por qué esto no es un problema?

richeym
fuente

Respuestas:

6

La inversión del control sigue siendo un concepto que se aplica bien. No necesita realizar una inyección de dependencia para aplicar IoC, aunque en .NET tienden a ir juntas a menudo.

El gran impulso detrás de la inyección de dependencia en .NET es evitar depender de implementaciones concretas. En Ruby, como mencionó, las cosas son mucho más abiertas y puede reemplazar la implementación de una clase en tiempo de ejecución, por lo que hay mucha menos necesidad de crear "interfaces" e inyectar dependencias explícitamente.

Se puede argumentar que las interfaces y IoC / DI tampoco son estrictamente necesarias en .NET (incluso cuando se trata de pruebas, existen marcos de trabajo que te permitirán eliminar la necesidad de interactuar todo bajo el sol), pero es más pronunciado en rubí.

Adam Lear
fuente
4

La inyección de dependencias es menos importante en los lenguajes dinámicos porque son dinámicos: puede cambiar su código cuando lo desee para no tener que planificar con anticipación las dependencias potencialmente cambiantes. Hay formas más fáciles de lograr IoC en un lenguaje como Ruby.

Fabio Kung sobre este tema, que se refiere a Jamis Buck sobre lo mismo , esos dan un poco de profundidad.

glenatron
fuente