2009-10-10 12 views
5

Una metáfora que me atrapó al programar sistemas sin DI es "una persona jugando con sus juguetes". Una persona que es un objeto y los juguetes de la persona son cualquier objeto que crea, almacena, inicializa y manipula. Los juguetes pueden enviar eventos cuando alcanzan cierto estado, pero no saben nada sobre la persona que los usa; son solo pequeñas cajas negras con interruptores de control que conforman sus interfaces. La persona puede escuchar los eventos de los juguetes y responder manipulando sus interfaces. La persona puede hacer lo que quiera con sus juguetes, pero probablemente no debería entrometerse con sus entrañas porque podrían romperse.¿Cuál es una buena metáfora de la inyección de dependencia?

los estragos que DI da rienda suelta a mi metáfora es que convierte los juguetes en seres conscientes que conoce a su dueño, la persona que los usa. Los juguetes pueden manipular a esta persona, pero la persona no sabe cómo funcionan y ni siquiera le importa. La persona es dueña de los juguetes y espera que los juguetes lo manipulen a la satisfacción del juguete.

WTF ?? ¡Eso suena horrible!
¿Qué es una buena metáfora mentales que han estado utilizando para pensar de cómo funcionan los sistemas de DI?

Respuesta

3

SOLID motivational images son una buena fuente.

metaphor of the dependency injection principle

+0

¿El enlace está roto? –

+1

@DavidAndreoletti gracias por el aviso. Lo encontré de nuevo y cargué una copia en SO en lugar de simplemente enlazar. – Finglas

1

Los juguetes no son conscientes. Simplemente dejan que la persona ate trozos de cuerda a ganchos, y cuando suceden ciertas cosas, los ganchos giran y se tira de la cuerda, para que la persona sepa que sucedió algo.

2

Desde mi perspectiva, la diferencia entre DI y no DI con respecto a su metáfora es con sistemas no DI, cada persona hace sus propios juguetes: deben saber cómo hacerlos y solo pueden usar los juguetes. ellos hacen. Con DI, la persona usa los juguetes que se le dan. No saben cómo hacerlos, pero pueden jugar con cualquier juguete que se les dé siempre que sepan cómo se comporta el juguete.

10

piensa que un caballero y su mayordomo. El mayordomo (el marco DI) proporciona al caballero los servicios (dependencias externas) que necesita bajo demanda (y algunos, como el café de la mañana, al momento de la "inicialización" :-)); el caballero (su clase) solo consume los servicios y no le importa de dónde vienen, siempre y cuando cumplan con sus requisitos (implemente cierta interfaz).

O si quiere que esté más cerca de su metáfora, su clase es el niño, el marco DI es la mamá, y los juguetes son los otros componentes. Al niño no le importa de dónde vienen los juguetes, siempre y cuando ella pueda jugar de la manera que quiera con ellos.

0

Se trata de Samurais y armas. Intente consultar ninject: http://ninject.org/. Ve al personaje "Visit the Dojo" para encontrar una metáfora interesante. No estoy seguro de si esto es lo que quiso decir, pero es creativo, no obstante.

2

Legos.

Piense en un bloque Lego como un componente de software que expone una o más interfaces (las pequeñas protuberancias en la parte superior) y tiene uno o más setters o argumentos constructores (los agujeros en la parte inferior).

Cuando compra una caja de Legos, los bloques no vienen preensamblados (cableados). Ellos son componentes independientes. Luego los ensambla (los cablea) conectando interfaces (baches) a setters/constructores (agujeros). Cada bloque no sabe nada sobre los otros bloques directamente. Se necesita algo más que el bloque para ensamblarlos: ese eres tú (o main() o un archivo de configuración de Spring, etc.).

lo sé ... Esto rompe un poco porque Legos en gran medida tiene una interfaz uniforme - pero funciona para mí :-)

2

utilizo sistema informático.Tiene un bloque de sistema y usted (un DI) conecta un monitor, un teclado y un mouse. El bloque del sistema solo sabe que un monitor es un dispositivo DVI, pero no le importa qué monitor es exactamente. Sabe cómo usar el mouse USB, pero no sabe ni le importa el clima, es un mouse óptico o uno que rueda.

Usted - el marco DI.
Bloque del sistema: se está atendiendo el sistema.
Monitor/mouse/teclado - servicios proporcionados por DI (usted) al bloque del sistema.

1

Una metáfora de DI que me dijeron que era para relacionarla con la de un reproductor de CD. Al jugador no le importa qué CD pones; sin embargo, cada CD que se inyecta en el reproductor proporciona una funcionalidad diferente en función de lo que el jugador requiere de él.

Cuestiones relacionadas