para - manual de programacion android pdf
Crear clase de modelo de datos para el manejo de la base de datos (3)
Estaba empezando a trabajar en una aplicación de base de datos cuando me di cuenta de que debería implementar un patrón MVC
ya que la aplicación es bastante compleja e implica varias operaciones de base de datos.
Con respecto a esto, he decidido crear una model class
separada para manejar las operaciones de la base de datos. Esta clase tendrá todos los métodos que me devolverán los datos después de ejecutar el comando Sqlite (Seleccionar por ejemplo) O simplemente ejecutará el comando SQLite (Eliminar por ejemplo). Pero lo que quiero es separar esta clase de la clase de Database Adapter
de Database Adapter
, donde abro, creo y cierro mi base de datos.
Déjame poner mi concepto en código:
public class DataModel
{
/*
Private members
*/
// Method to Select data from Student table
public ArrayList<String> FetchStudents (parameter 1)
{
private ArrayList<String> arrStudent;
DatabaseAdapter objDB= new DatabaseAdapter();
objDB.open();
/*
Some code
*/
objDB.close();
return arrStudent
}
//Method to delete record from Student table
public DeleteStudent(parameter 1)
{
DatabaseAdapter objDB= new DatabaseAdapter();
objDB.open();
//Some code
objDB.close();
}
/*
Rest of methods
*/
}
// DatabaseAdapterClass
private static class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
/**
* onCreate method is called for the 1st time when database doesn''t exists.
*/
@Override
public void onCreate(SQLiteDatabase db) {
Log.i(TAG, "Creating DataBase: " + CREATE_STUDENT_TABLE);
db.execSQL(CREATE_STUDENT_TABLE);
}
/**
* onUpgrade method is called when database version changes.
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
+ newVersion);
}
}
Pregunta :
Lo que quiero preguntar es ¿este es el enfoque correcto de implementación? ¿Está bien si creamos una clase separada para los métodos de la base de datos ? ¿Qué limitaciones o problemas creen ustedes que podrían molestarme más adelante? Además, ¿hay una mejor manera de implementar el concepto anterior?
Gracias
Piedra
El modelado de datos de enfoque nativo de android es de proveedores de contenido. Enlazar
de alguna manera, abstrae el tipo de fuente de datos.
solía hacerlo de una manera similar. pero nuevamente también es subjetivo.
A lo que se refiere como una ''clase de modelo'' se le conoce más comúnmente como un objeto de acceso a datos (DAO). Su modelo generalmente sería un conjunto de clases que contienen sus datos y lógica comercial. En tu caso, probablemente una clase de Student
tenga una ID, un nombre, un GPA, etc. Si desea separar el acceso a los datos de su modelo, su clase de acceso a los datos ( DatabaseHelper
) consultará la base de datos y usará los datos que obtenga para devolver Student
objetos del Student
o una List<Student>
. Realmente no tiene mucho sentido separar la clase de acceso a datos del asistente de base de datos, es mejor tener todo su código relacionado con la base de datos en un solo lugar.
Sin embargo, el uso de clases de modelo (sin embargo) puede no ser siempre práctico en Android, ya que cuenta con soporte nativo para obtener y mostrar datos de un Cursor ( CursorAdapter
, etc.). Si quiere usar algo de eso, debería exponer sus datos no como objetos modelo sino como Cursor
. En cuanto a los proveedores de contenido, eche un vistazo a esos también, pero si no necesita exponer sus datos a otras aplicaciones, escribir un ContentProvider
puede ser excesivo.
En otra nota, no desea abrir y cerrar la base de datos en cada consulta. De hecho, es seguro dejarlo abierto, se cerrará automáticamente cuando muera el proceso de tu aplicación.
Hago esto en mi aplicación y funciona de maravilla, el código está limpio y no afecta el rendimiento en absoluto, especialmente con los teléfonos de hardware que tienen hoy en día. Probé todos los otros enfoques e incluso utilicé un proveedor de contenido, pero en mi opinión eso simplemente complicaba las cosas.