2011-08-03 20 views
7

Estaba empezando a trabajar en una aplicación de base de datos cuando me di cuenta de que debería implementar el 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 un model class por separado 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 Database Adapter, donde abro, creo y cierro mi base de datos.
Permítanme poner mi concepto en código:Creando clase de modelo de datos para manejo de base de datos

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 el enfoque correcto de la aplicación? ¿Está bien si crea una clase separada para los métodos de 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

Respuesta

11

Lo que usted llama 'clase de modelo' es más comúnmente conocido como objeto de acceso a datos (DAO). Su modelo generalmente sería un conjunto de clases que contienen sus datos y lógica comercial. En su caso, probablemente una clase Student con propiedades de ID, nombre, 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 utilizará los datos que obtenga para devolver los objetos Student o 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 tiene soporte nativo para obtener y visualizar datos de un Cursor (CursorAdapter, etc.). Si desea utilizar 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.

0

nativo de modelado de datos enfoque de androide es contentproviders. Link

tipo de extracto del tipo de fuente de datos también.

solía hacerlo de manera similar. pero nuevamente también es subjetivo.

1

Hago esto en mi aplicación y funciona maravillosamente, el código es 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.

Cuestiones relacionadas