sábado, 22 de septiembre de 2012

Usando Google Guice y Guava para inyección de dependencias.


Primeros pasos con librerias de Google


Hola a todos, espero que esten bien, en este post les queria hablar sobre un par de librerías que he comenzado a utilizar hace muy poco tiempo, pero que tienen cosas muy interesante, y que nos van a ayudar a hacernos el código más claro, legible, mantenible  y menos propenso a errores, por supuesto si lo utilizamos de manera correcta :D
Para resumir bastante la cosa (demasiado, pero es solo por ahora), la librería Guice la vamos a utilizar para realizar inyecciones de dependencias , seguramente muchos de ustedes pensaran, pero si ya hay frameworks para eso, como Spring uno de los más conocidos. El problema y mayor diferencia con Spring por ejemplo, es que Springs no sirve solo para eso, es muchisimos mas amplio, tiene muchas otras funciones, lo que hace también que uno necesite leer mucha más documentación, y a su vez sea más complicado de utilizar. En cambio con Guice, vamos a poder a utilizarla y ver sus beneficios en mucho menos tiempo, además de que también nos aseguramos de que es código testeado por una empresa tan grande como esa, así que eso nos va a ahorrar muchos dolores de cabeza :D
En cambio Guava se podría decir a grandes rasgos qué es la librería de Google que va a complementar a la JDK :D Nos va a ayudar con el tratamiento de colecciones, caching, concurrencia, procesamiento de I/O, y demas cosas comunes a la hora de programar, pero que nos van a ahorrar tiempo ;)

Por las dudas antes de ver el código algo muy bueno seria que refresque en su memoria, para los que nunca las han usado, que son las Inyecciones de Dependencias :



http://es.wikipedia.org/wiki/Inyecci%C3%B3n_de_dependencias


También lo pueden buscar como IoC (Inversion of Control) .
Acotación, frase muy relacionada al tema, y que se repite en varios libros:
No me llames, yo te llamo. (si , lo mismo que te dicen en las entrevistas laborales jajaja )

Y se estarán preguntando, y un ejemplo de código ?

Bueno aca les voy a pasar un ejemplo de lo más sencillo que podrán hacer con estas librerías:

/* Aqui es donde se va a realizar la inyección */

public class ProductMain{

/* Omitidos los imports, estas son interfaces */
private final ProductWriter writer;
private final ProductReader reader;

/* Con esta anotation vamos a avisar que aquí se va a realizar la inyección */
@Inject
public ProductMain(ProductReader reader, ProductWriter writer){

/* Esto es de Guava, aca estamos verificando que lo que nos pasaron en la  función  no sea null */
checkNotNull(reader);
checkNotNull(writer);

/* Como pueden ver, sin la inyección, pareciera que creamos objetos a partir de     interfaces , pero no es asi  ;) */
this.writer = writer;
this.reader = reader;
}


/* este es un simple ejemplo de interfaz */

public interface ProductReader {

public void getPrice();
}

/* Esta es la clase que implementa la interfaz */
public class ProductReaderImpl implements ProductReader{
public void getPrice(){
/* aqui iria la implementacion del metodo :D */
}
}


/* Y con esta clase, vamos a configurar la inyección, aca es donde vamos a decir que clase de objeto vamos a pasarle a la interfaz, para ello tenemos que heredar de la clase AbstractModule */
public class ProductModule extends AbstractModule{

@Override
protected void configure() {
/* Como podran observar, aqui unimos la interfaz con la implementación que deseamos */
bind(ProductReader.class).to(ProductReaderImpl.class);
}
}


Video de presentaciòn:







http://www.youtube.com/watch?v=hBVJbzAagfs

Por supuesto que en este post, se ha visto todo demasiado por encima, pero era más que nada para que conocieran estas herramientas, mas adelante, les voy a ir mostrando cosas mucho más interesante, y una de las cosas que tiene de bueno, es que esta la versión para Android de estas librerías llamada RoboGuice, esta es la dirección oficial del proyecto:

http://code.google.com/p/roboguice/


Fuentes:

http://code.google.com/p/google-guice/wiki/Motivation?tm=6
Lugar de descargas de las librerías y sitio oficial:
http://code.google.com/p/google-guice/downloads/list

http://code.google.com/p/guava-libraries/


Bueno esto es todo por ahora, como veran en ese ejemplo, para ese tipo de cosas es muy fácil de utilizar, a medida que vaya agarrando un poco más de experiencia con las mismas, voy a ir explicando cuestiones un poco más complejas, en las que nos va a ayudar mucho. Con lo poco que he visto hasta el momento, ya puedo ver muchos de los beneficios que voy a tener en el futuro utilizando las mismas, así que las recomiendo :D

Saludos a todos, Gabriel E. Pozo