2009-09-22 9 views

Respuesta

37

Usar Google Guice para proporciona facilidad en la prueba unitaria es solo una ventaja de alto nivel. Algunas personas pueden incluso no usar pruebas unitarias en su proyecto. La gente ha estado usando Spring/Dependency Injection más que solo para pruebas unitarias.

La ventaja de bajo nivel del uso de Google Guice es una cuestión de cohesión en su aplicación, sus clases en el proyecto pueden estar ligeramente acopladas entre sí. Puedo proporcionar una clase para otra clase sin que dependan el uno del otro.

Considere este ejemplo:

public class A{ 

} 

public class B{ 
    A a = new A(); 
} 

Clase B sería estrechamente unida a la clase A, o en otras palabras, depende de la existencia de una clase.

Pero con Guice puedo vez que sea imprecisa como esto:

public class B{ 
    private A a; 

    @Inject 
    public B(A a){ 
     this.a = a; 
    } 
} 

Clase B es ahora menos vinculados a A, y Guice es responsable de proporcionar la instancia de A en lugar de B que tiene instanciarlo . Con esto, puede ampliarlo para proporcionar una interfaz de A a B, y la implementación puede ser un objeto Mock si desea probar sus aplicaciones por un equipo.

Habiendo dicho eso, solo estamos discutiendo los beneficios de la Inyección de Dependencia hasta el momento. Beyond Dependency Injection, los beneficios de usar Google Guice son:

  1. Guice tiene una implementación muy limpia de la inyección de constructor. Como puede ver en el ejemplo, simplemente agrega @Injection annotation constructor.
  2. Guice también tiene setter Injection usando la misma anotación.
  3. Habiendo dicho eso, la inyección basada en anotaciones es un enfoque muy limpio en comparación con la inyección basada en XML como en otras implementaciones de DI.
  4. Toda la inyección de la dependencia y la configuración utilizan Java, por lo que está garantizado que obtendrá una seguridad tipo en su aplicación de forma predeterminada.
  5. Guice tiene una implementación muy ligera de Aspect Oriented Programming (o tal vez puede llamarlo como un envoltorio para la implementación de AOPAlliance AOP). Y lo bueno de esto es que no genera stubs o cualquier otra cosa.

Esa es la visión general de la misma.Pero a medida que profundizas con Guice, hay muchas más cosas buenas al respecto. A simple ejemplo de vida real es que si está usando GWT with MVP implementation, los componentes/widgets en su aplicación GWT están muy poco acoplados y no están estrechamente integrados entre sí.

4

Creo que la ventaja viene con la codificación de interfaces, pruebas y proxies.

Codificación a una interfaz ayuda a mantener su código en capas correctamente, hace que sea posible inyectar burla para las pruebas, y le permite generar proxies automagicamente tan código de cliente no tiene que preocuparse acerca de la implementación.

Esto es válido para Guice, Spring, PicoContainer y todos los marcos DI.

¿Sucintamente suficiente?

15

Tal vez deberías retroceder en el tiempo y mirar más de cerca los problemas que Guice quería resolver. Para entender las motivaciones detrás de Guice, la noticia Bob Lee: I Don't Get Spring en TheServerSide.COM (y sus comentarios) es el punto de partida perfecto. Luego, continúe con el anuncio de Google Guice, A Java Dependency Injection Framework (y los comentarios) y Tech Talk: Bob Lee on Google Guice (y los comentarios).

Personalmente, estaba compartiendo inquietudes sobre el mal XML: infierno de configuración XML, XML y posibles errores en tiempo de ejecución, identificadores de cadena adversos propensos a errores y refactorización, etc. Realmente creo que las opiniones escépticas sobre Spring y la concurrencia bueno para todos (incluyendo Spring). Por lo tanto, me alegré de ver a un nuevo jugador en el panorama del marco DI, especialmente un marco moderno que aproveche las características de Java 5 (genéricos y anotaciones por el bien de la seguridad del tipo).

Y debido a que Google se está ejecutando Guice en aplicaciones de misión crítica (casi todas las aplicaciones basadas en Java es también una aplicación Guice-base: AdWords, Google Docs, Gmail, e incluso YouTube según lo informado por "loco" Bob Lee en Guice²), no puedo creer que Guice esté totalmente equivocado y no proporcione ningún valor. Lamentablemente, no creo que Google proporcione muchos códigos de estas aplicaciones como ejemplos ... Pero puede encontrar cosas interesantes en el list of applications that use Guice y/o el list of 3rd party Guice addons. O consulte los libros mencionados en Guice². O pregunte a Bob :)

+0

¿Qué quiere decir exactamente "refactoring-adverse string identificadores"? ¿Podrías expandir un poco? – Geek

Cuestiones relacionadas