2010-02-03 20 views
48

¿El hecho de que Rails tenga un enfoque MVC significa que tiene una inyección de dependencia?¿Existe inyección de dependencia en Rails?

¿O hay alguna razón por la que no hablamos de la inyección de dependencia en Rails?

Si Rails tiene inyección de dependencia, ¿en qué consiste?

+0

esta es una muy buena pregunta. Aprendí mucho al leer las respuestas – Phil

Respuesta

9

La inyección de dependencia generalmente no es necesaria con Ruby. Jamis Buck blogged extensively sobre las razones de por qué. Bien vale la pena leer.

+39

Jamis realmente estaba diciendo que no hay necesidad de los frameworks DI pesados ​​que frecuentemente se usan con Java. No dijo que no es necesario en Ruby; por el contrario, DI se puede usar en Ruby para reducir el acoplamiento y mejorar la capacidad de prueba. Simplemente no es TAN necesario. – scottburton11

+8

El autor del blog dice que _so_ usan DI todos los días, pero no un marco DI. –

+0

Ese fue un artículo increíble. Debe leer para todos los que usan Ruby. – Flavia

8

Dependency Injection es un paradigma, por lo que existe en todos los lenguajes orientados a objetos.

Ya existen marcos DI para comprobar Rubí - this question

0

diría que no es necesario tal cosa con el rubí ... pero si realmente desea, algunas personas tienen workarounds.

10

IoC es el gran martillo, pero DI ocurre todos los días en Ruby/Rails. Cuando lo haga:

def initialize(model_klass) 
    @model_klass = model_klass 
end 

Esto es DI. Este paradigma también se usa en varios lugares en el código fuente de Rails. Por ejemplo, la gema Railties es principalmente un motor DI. Puede inyectar su ORM favoriate, varias configuraciones de plugin y generadores.

Dependency Injection tiene un nombre grande y aterrador, pero a lo que se reduce es simplemente desacoplando las dependencias de clase mediante formas de inyectar las dependencias durante el tiempo de ejecución.

No importa el idioma que utilice, siempre que necesite conectar el comportamiento/código en algún lugar, probablemente lo esté usando.

Cuestiones relacionadas