Bueno antes de complicarme más y más con estas ideas y código Java, mejor explicaré ahora el concepto de lo que se buscó para dicho propósto. Entonces, va de nuevo, y olvídense por un momento lo expuesto en el post JavaME y DBObjects (luego le encontraremos más sentido).
Todo comenzó con la necesidad de tener un mecanismo de almacenamiento de datos en celulares. Sería simple si se pudieran crear objetos en Java y que éstos ya puedan almacenarse en algún repositorio de datos con una simple orden "guardar":
public class Contacto {La técnica para guardar los datos del contacto podría ser tomar todos sus atributos y concatenarlos, luego asignarles un código único y guardarlo en el repositorio.
public String nombre;
public String telefono;
public String correo;
public String guardar() {
// .. aquí estaria toda la lógica
// para guardar al contacto en el
// celular.
}
}
Contacto 1:
- Nombre: Juan Pérez
- Teléfono: 987524411
- Correo: juan.perez@correo.net
Contacto 2:
- Nombre: María Sánchez
- Teléfono: 993555720
- Correo: m.sanchez.t@ien.com
public class Mensaje {
public String remitente;
public String contenido;
public String[] contactos;
public String guardar() {
// .. aquí estaria toda la lógica
// para guardar el mensaje
}
}
Mensaje 1:
- Remitente: Esteban Salas
- Contenido: Hoy habrá una fiesta en casa de Pedro a las 7:00 pm
- Contactos: Juan Pérez, María Sánchez
Mensaje 2:
- Remitente: Esteban Salas
- Contenido: Inviten a Elena, Marcos y Silvia. ¡Nos vemos!
- Contactos: Juan Pérez, María Sánchez
En este caso la técnica a usar para almacenar el mensaje en el celular sería la misma, es decir, juntar todos los atributos del mensaje, concatenarlos, asignarles un código único y guardalo en el repositorio de datos.
Entonces para almacenar al contacto, la lógica del método "guardar" podría ser:
public class Contacto {De la misma forma con el mensaje:
public String nombre;
public String telefono;
public String correo;
public String guardar() {
String contacto = nombre + "" +
telefono + "" +
correo;
// Genera clave única
String id = UKG.getKey(contacto);
// Convierte al contacto en bytes
bytes[] data = contacto.toBytes[];
...
// Procedimiento que guarda los bytes
}
}
public class Mensaje {
public String remitente;
public String contenido;
public String[] contactos;
public String guardar() {
String mensaje = remitente + "" +
contenido;
//Concatena a todos los contactos destino
for (int i = 0; i < contactos.lenght; i++)
mensaje = mensaje + "" + contactos[i];
// Genera clave única
String id = UKG.getKey(mensaje);
// Convierte al mensaje en bytes
bytes[] data = mensaje.toBytes[];
...
// Procedimiento que guarda los bytes
}
}
Si el mecanismo es el mismo, se podría crear un método general que lea cada atributo del objeto, los concatene, los convierta en bytes, genere la clave única y almacene al objeto. Ese método ya no tendría que ser implementado en cada objeto de dato, pues siempre será de la misma forma. ¿Sucedería lo mismo con la carga de objetos que ya estan en el repositorio de datos?, es decir, ¿se podría crear un método general que permita leer bytes del celular y traerlos como objetos para las aplicaciones de celulares? La respuesta es si.
Entonces es correcto pensar en una librería que permita abstraer todas esas lógicas de tratamiento de datos para que sólo nos podamos concentrar en la lógica de la aplicación. Claro que si, por ejemplo los objetos de datos se crearían como hijos de uno padre que ya tenga implementado el método guardar. Sería más simple como se muestra a continuación:
public class Contacto extends ObjetoDato {
private String nombre;
private String telefono;
private String correo;
// Ya no es necesario, hereda del padre
// public String guardar() {
// }
}
public void guardarContactoEjemplo() {
Contacto contacto = new Contacto();
contacto.nombre = "Juan Pérez";
contacto.telefono = "987524411";
contacto.correo = "juan.perez@correo.net";
// Método mágico para guardar los datos
contacto.guardar();
}
Bueno, esta es precisamente la filosofía del desarrollo: crear una capa que abstraiga la lógica de operaciones de datos usando RMS de Java ME.