2008-11-12 14 views

Respuesta

46

Jamis Buck, que escribió Copland and Needle, posted here sobre Needle, la inyección de dependencia y su utilidad en un mundo de Ruby.

Es largo, pero vale la pena leer, pero en caso de que quiera el párrafo único más relevante a su pregunta, me gustaría sugerir éste, desde justo antes del final:

marcos DI son innecesarias. En más entornos rígidos , tienen valor. En entornos ágiles como Ruby, no tanto. Los patrones mismos pueden siendo aplicable, pero cuidado con caer en la trampa de pensar que necesita una herramienta especial para todo. Ruby es Play-Doh, ¡recuerda! Mantengamos de esa manera.

HTH

+2

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

+9

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 ". –

+2

Solo quiero señalar que * DI Frameworks * no son necesarios en Ruby, pero el paradigma * DI * no debe ignorarse. –

1

Aquí hay uno más COI http://alexeypetrushin.github.com/micon

que lo utilizó como un componente central de mi framework web (no Rieles), Se puede ver que funcione aquí - http://ruby-lang.info (este sitio alimentado con ella) Y me un montón de tiempo y de código guardado, así que personalmente encuentro muy útil COI (en algunos casos).

marcos DI no son necesarios. En ambientes más rígidos, tienen valor. En entornos ágiles como Ruby, no tanto. Los patrones en sí pueden seguir siendo aplicables, pero ten cuidado de no caer en la trampa de pensar que necesitas una herramienta especial para todo. Ruby es Play-Doh, ¡recuerda! Mantengámoslo de esa manera.

Vi habla de Jamis Buck, y estoy de acuerdo y en desacuerdo él ingenio, he aquí por qué http://ruby-lang.info/blog/you-underestimate-the-power-of-ioc-3fh

7

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.

+2

De acuerdo, ¡especialmente con el último párrafo! –

Cuestiones relacionadas