Muestra las diferencias entre dos versiones de la página.
|
patrones:di [2014/09/09 07:57] admin |
patrones:di [2014/09/09 09:24] (actual) admin [Inyección de Dependencias] |
||
|---|---|---|---|
| Línea 16: | Línea 16: | ||
| Veamos el siguiente código Java: | Veamos el siguiente código Java: | ||
| - | <code java> | + | <sxh java> |
| public class PruebaIoC { | public class PruebaIoC { | ||
| - | SessionFactory sessionFactory=HibernateUtil.getSessionFactory(); | + | ProfesorDAO profesorDAO=new ProfesorDAOImplHibernate(); |
| - | ProfesorDAO profesorDAO=new ProfesorDAOImplHibernate(); | + | SessionFactory sessionFactory=HibernateUtil.getSessionFactory(); |
| } | } | ||
| - | </code> | + | </sxh> |
| - | + | * Línea 1: Para crear el objeto del interfaz ''ProfesorDAO'' usamos la orden ''new'' e indicamos el nombre de la clase que implementa el interfaz que es ''ProfesorDAOImplHibernate'' | |
| - | Hasta ahora, si nuestra clase ''PruebaIoC'' necesitaba un objeto, se llamaba a un método que le proveía dicho objeto o simplemente se creaba con ''new'', tal y como vemos en las líneas anteriores. | + | * Línea 2: Para crear el objeto del interfaz ''SessionFactory'' usamos el método estático ''getSessionFactory()'' de la clase ''HibernateUtil''. |
| + | ¿Cual son los problemas de estas 2 líneas? | ||
| Obviamente, la línea ''ProfesorDAO profesorDAO=new ProfesorDAOImplHibernate()'' es bastante lamentable ya que estamos atando el código de ''PruebaIoC'' a una implementación concreta del interfaz ''ProfesorDAO''. Éso se debe evitar a toda costa , aunque una solución es crear otra clase de factoría del interfaz ''ProfesorDAO''. | Obviamente, la línea ''ProfesorDAO profesorDAO=new ProfesorDAOImplHibernate()'' es bastante lamentable ya que estamos atando el código de ''PruebaIoC'' a una implementación concreta del interfaz ''ProfesorDAO''. Éso se debe evitar a toda costa , aunque una solución es crear otra clase de factoría del interfaz ''ProfesorDAO''. | ||
| Línea 42: | Línea 43: | ||
| Vemos cómo ahora sólo se declaran las 2 propiedades. El framework de Inyección de Dependencias que usemos, automáticamente asignará los valores a las 2 propiedades sin que la clase ''PruebaIoC'' sepa de dónde han salido. Es decir, que hemos eliminado las dependencias a ''HibernateUtil'' y hemos evitado incluir en el código la implementación concreta del interfaz ''ProfesorDAO''. | Vemos cómo ahora sólo se declaran las 2 propiedades. El framework de Inyección de Dependencias que usemos, automáticamente asignará los valores a las 2 propiedades sin que la clase ''PruebaIoC'' sepa de dónde han salido. Es decir, que hemos eliminado las dependencias a ''HibernateUtil'' y hemos evitado incluir en el código la implementación concreta del interfaz ''ProfesorDAO''. | ||
| + | |||
| <note tip> | <note tip> | ||