Pregunta

Hay un lado negativo?Me siento casi que dependen de él ahora.Siempre que un proyecto se pasa de un cierto tamaño casi se siente una reacción alérgica a los modelos estándar y de inmediato volver a conectar con un marco de inserción de Dependencia.

El mayor problema que he encontrado es que puede ser confuso para otros desarrolladores que están aprendiendo de ti.

También, me sentiría mucho mejor si se parte de la lengua que yo estaba usando.Aunque, para Java, al menos, hay un par muy ligero bibliotecas que están bastante bien.

Los pensamientos?Las malas experiencias?O simplemente dejar de preocuparse?


[EDITAR] Re:Descripción de la Inyección de Dependencia en sí

Lo siento por ser vago. Martin Fowler probablemente lo describe MUCHO mejor de lo que yo jamás podría...no hay necesidad de perder el esfuerzo.

Casualmente, esto confirma un punto sobre ella, que todavía no es ampliamente practicado y podría tender a ser una barrera a la hora de trabajar con equipos si todo el mundo no está a la velocidad de la misma.

¿Fue útil?

Solución

Me he tomado una puñalada en el que describe algunas de las posibles desventajas en un blog aquí: http://kevin-berridge.blogspot.com/2008/06/ioc-and-di-complexity.html

Otros consejos

El problema que tengo con DI es el mismo problema que tengo con COM y con cualquier código que se ve algo como:

i = GetServiceOrInterfaceOrObject(...)

El problema es que un sistema no puede ser entendida desde el código.Debe haber documentación en algún lugar [persona] que define qué servicio/interfaz/objeto puede ser solicitada por el servicio de interfaz//objeto X.Esta documentación debe no sólo se mantiene, sino que está disponible tan fácilmente como la fuente.

A menos que el documento está muy bien escrito, es a menudo no es fácil ver las relaciones entre los objetos.A veces las relaciones son temporales, lo que les hace aún más difícil de descubrir.

Me gusta el principio KISS, y yo soy un firme creyente en el uso de la herramienta correcta para el trabajo.Si el beneficio de la DI, para un proyecto dado, supera la necesidad de escribir comprensible código, que utilizarlo.

También, me sentiría mucho mejor si fuera una parte de la lengua que yo estaba usando.

FYI hay una forma muy sencilla y funcional dependecy de inyección como parte de JDK 6.Si usted necesita ligero, sencillo de inyección de dependencia, para luego usarla.

El uso de ServiceLoader la clase puede solicitar un servicio (o muchas implementaciones del servicio) basado en una clase:

 package dependecyinjection;  
 import java.util.ServiceLoader;  

 public abstract class FooService {  

     public static FooService getService() {  
         ServiceLoader<FooService> loader = ServiceLoader.load(FooService.class);  

         for (FooService service : loader) {  
             return provider;  
         }  

         throw new Exception ("No service");  
     }  

     public abstract int fooOperation();  

 }  

 package dependecyinjection;  
 public class FooImpl extends FooService {  
     @Override  
     public int fooOperation() {  
         return 2;  
     }  
 }  

¿Cómo ServiceLoader define el servicio de implementaciones que se devuelven?

En su carpeta de proyecto de crear una carpeta con el nombre META-INF/services y crear un archivo llamado dependencyinjection.FooService.Este archivo contiene una línea que apunta a la implementación del servicio.En ese caso:dependecyinjection.FooImpl

Esta no es muy conocida todavía.

Soy un gran beleaver en IO sin embargo, yo vi algunos de los proyectos con la enorme archivos de configuración xml que nadie entiende.Así que ten cuidado de programación en xml.

En mi opinión, los principales inconvenientes son la curva de aprendizaje (como punto de salida) y el potencial para el agregado de abstracción para hacer más difícil la tarea de depuración (que en realidad es parte de la curva de aprendizaje así).

A mí, DI que me parece ser más apropiada para los más grandes, los sistemas complejos-por pequeño one-off aplicaciones, puede resultar en la aplicación que se va a sobre-diseñado, básicamente, tener la arquitectura tomar más tiempo de desarrollo a adherirse a que siempre lo puede hacer en el valor que aporta.

Acaba de dejar de preocuparse.Es mi opinión que en el tiempo de la Coi técnicas va a ser una segunda naturaleza para la mayoría de los desarrolladores.Estoy tratando de enseñar a los devs aquí en el trabajo y me es difícil hacer llegar el mensaje, porque se siente tan antinatural a la forma en que siempre hemos hecho las cosas..que casualidad haber sido el camino equivocado.Asimismo, los desarrolladores tanto de nuevo a la Coi y, de nuevo en un proyecto que me parece aún más difícil.Son de uso para utilizar el IDE para seguir el rastro de las dependencias para obtener una comprensión de cómo todo esto se "bloquea juntos".Esta información a menudo está escrito en los arcanos de XML.

Puede agregar un enlace o dos para explicar lo que la Inyección de Dependencia es en realidad, para aquellos de nosotros jugando en casa?El artículo de la wikipedia es entretenida, pero no es muy esclarecedor.

El único aspecto negativo que se me ocurre es pequeña disminución del rendimiento a través de la constante virtual de llamadas :)

@Blorgbeard: http://www.martinfowler.com/articles/injection.html es probablemente uno de los mejores artículos sobre el tema

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top