Creación de una clase de modelo de datos para el manejo de bases de datos

Apenas estaba comenzando a trabajar en una aplicación de la base de datos cuando realicé que debía implementar el patrón de MVC pues la aplicación es bastante compleja e implica varias operaciones de la base de datos.
En relación con esto, he decidido crear una model class independiente para el manejo de operaciones de 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 de Database Adapter , donde abrir, crear y cerrar mi base de datos.
Permítanme 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 el enfoque correcto de la implementación? ¿Está bien si crea una clase separada para los métodos de base de datos ? ¿Qué limitaciones o problemas que ustedes piensan podrían molestarme más tarde? Además, ¿existe una mejor manera de implementar el concepto anterior?

Gracias
Piedra

A lo que se refiere como una "clase de modelo" es más comúnmente conocido como un objeto de acceso a datos (DAO). Su modelo normalmente sería un conjunto de clases que contienen sus datos y lógica de negocio. En su caso, probablemente una clase de Student tenga un ID, nombre, GPA, etc. Si desea separar el acceso a los datos de su modelo, debería tener su clase de acceso a datos ( DatabaseHelper ) consultar la base de datos y utilizar los datos que obtiene para devolver objetos Student o una List<Student> . Realmente no hay mucho punto en separar la clase de acceso a datos de la base de datos auxiliar, es mejor tener todo su código relacionado con la base de datos en un lugar.

El uso de clases de modelo (sólo), sin embargo, puede no ser siempre práctico en Android, ya que tiene soporte nativo para obtener y mostrar datos desde un Cursor ( CursorAdapter , etc.). Si desea utilizar algo de eso, tendría que exponer sus datos no como objetos de modelo, sino como Cursor . En cuanto a los proveedores de contenido, eche un vistazo a ellos también, pero si no necesita exponer sus datos a otras aplicaciones, escribir un ContentProvider podría ser excesivo.

En otra nota, no desea abrir y cerrar la base de datos en cada consulta. En realidad, es seguro dejarlo abierto, se cerrará automáticamente cuando el proceso de la aplicación muera.

Hago esto en mi aplicación y funciona maravillosamente, el código es limpio y doesnt rendimiento de impacto en absoluto, especialmente con los teléfonos de hardware tienen hoy. He intentado todos los otros enfoques e incluso utiliza un proveedor de contenido, pero sólo más cosas complicadas en mi opinión.

El modelado de datos de enfoque nativo de android es contentproviders. Enlazar

Que tipo de abstracts el tipo de fuente de datos también.

Yo lo hacía de una manera similar. Pero de nuevo su también subjetivo.

  • ¿El depurador de Android trunca mensajes de depuración?
  • Android Room: ¿Cómo modelar las relaciones?
  • ¿Qué son las aplicaciones com.sec.android.provider. * Exactamente?
  • Cómo implementar SQLCipher cuando se utiliza SQLiteOpenHelper
  • Actualización de Android 6.0 que causa DB sqlite falla durante init
  • ¿Está bien usar la clase estática de "ayudante de base de datos"?
  • Custom SimpleCursorAdapter, consulta de base de datos y NullPointerException
  • ¿Cómo conectarse a SQLite DB con contraseña con OrmLite?
  • Android: ¿ver bases de datos SQLite en el dispositivo?
  • Insertar TimeStamp en SQLite para Android
  • La carpeta de "datos" del monitor de dispositivos Android está vacía
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.