Hola Jabatos, seguimos...
Como hemos visto en el ejemplo anterior, hemos creado una aplicación mediante el patrón de arquitectura MVC. En esa aplicación Java SE la capa de datos era una base de datos mysql, y la capa de persistencia era JPA. Además, para separar de forma eficiente la capa persistencia de la capa negocios, implementábamos un fichero DAO.
Como continuación a esa práctica, y para estudiar la utilidad del DAO, vamos cambiar la capa de datos. Ahora la capa de datos consistirá en un fichero de texto, que llamaremos "userdata.txt".
La inmediata consecuencia de este cambio en la base de datos es que deberemos realizar cambios en nuestra capa de persistencia (el model de la aplicación). La correcta implementación efectuada en la aplicación, con separación de funciones, evitará tener que modificar más ficheros que aquellos que corresponden a la capa persistencia:
- EjemploBeanDAO, que es el DAO.
- Userdata, que es el model.
Transformación del entity JPA en simple pojo
Modificaremos los ficheros models, (anteriormente llamados entities) para convertirlos en ficheros pojo normales. El cambio consiste simplemente en quitarles las anotaciones que los convertían en ficheros entity:
package models;
public class Userdata implements Serializable {
private static final long serialVersionUID = 1L;
private String id;
private String email;
private String login;
private String name;
private String password;
// AÑADIR GETTERS Y SETTERS
}
Como habéis observado, el trabajo ha sido mínimo. Alguno podrá preguntarse ¿para qué mantener objetos Userdata si vamos a grabar simplemente texto? Pues porque trabajamos con OOP (programación orientada a objetos) además de para mantener la coherencia del proyecto, ya que es más fácil transformar en el DAO el objeto a texto y viceversa, que acometer las modificaciones pertinentes en diversos puntos de la aplicación.
Modificación del fichero DAO
Realizaremos la modificación de los todos métodos afectados por el cambio de la implementación de capa de datos. Aquí las modificaciones son profundas, ya que hay que transformar los métodos por completo.
La clave consiste en que los métodos deben mantener los mismos nombres y argumentos, así como el objeto de retorno. Es por ello que hemos utilizado un interface, para obligar a implementar esos métodos. De esta manera no se afectan las otras capas, y por lo tanto se evita trabajar de más y la posibilidad de cometer errores.
El fichero EjemploBeanDAO, que realizará la lectura de los datos contenidos en fichero txt será el siguiente:
public class EjemploBeanDAO implements EjemploBeanInterface {
public synchronized Userdata getUserData(String login, String password) {
Userdata newUser=null;
FileReader fr=null;
BufferedReader bf=null;
String leeUser;
Scanner sc=null;
try {
fr=new FileReader(new File("userdata.txt"));
bf=new BufferedReader(fr);
while ((leeUser=bf.readLine())!=null) {
// leemos la linea entera y descompondremos en campos
sc=new Scanner(leeUser);
sc.useDelimiter("\\|");
// leemos cada campo
String id=sc.next();
String log=sc.next();
String pas=sc.next();
String name=sc.next();
String email=sc.next();
if (login.equals(log) && password.equals(pas)) {
newUser=new Userdata();
newUser.setId(Long.parseLong(id));
newUser.setLogin(log);
newUser.setPassword(pas);
newUser.setName(name);
newUser.setEmail(email);
break;
}
}
} catch (IOException e) {
System.err.println("Error leyendo el fichero");
return null;
} finally {
try {
bf.close();
fr.close();
} catch (IOException e) {
// error cerrando el buffer y el fichero
System.err.println("Error de buffer o cierre fichero");
}
}
return newUser;
} // fin del metodo
}
Creación del fichero de texto
Con el block de notas, o cualquier otro programa semejante, debéis proceder a crear el fichero llamado "userdata.txt", y guardais la siguiente información:
1|pepeuser|123456|Jose user user|pepeuser@gmail.com|
Es decir, la misma información que teníamos en la base de datos, la tenemos ahora en un fichero de texto. Poned atención en el separador. He remarcado en verde la línea de código donde se declara el separador de los campos del fichero. Podéis cambiarlo, siempre y cuando (lógicamente) lo hagáis también en el fichero.
Proceded a ubicar el fichero de texto dentro de la raíz de la aplicación:
Ejecutando la aplicación...
Ejecutamos la aplicación, y nuevamente deberá mostrar esta información:
DATOS DEL USUARIO:
NOMBRE: Jose user user
EMAIL: pepeuser@gmail.com
Conclusiones
Mucho trabajo para un resultado tan poco espectacular... pero supongamos... imaginad en términos escalares. Las modificaciones en el DAO están localizadas y pueden acometerse con rápidez y precisión. Por el contrario, sin el DAO, en una aplicación con múltiples ficheros, habría que localizar, modificar y testear en diversos puntos, multiplicando el trabajo y la posibilidad de errores.
Pienso que por eficacia, sencillez, y coherencia con el patrón MVC, es importante utilizar ficheros DAO. No son imprescindibles, pero ayudan mucho para una eficiente separación de capas.
Anterior tema
No hay comentarios:
Publicar un comentario