为数据库处理创建数据模型类

8 database sqlite model-view-controller android datamodel

当我意识到我应该实现MVC模式时,我刚刚开始研究数据库应用程序,因为应用程序非常复杂并涉及许多数据库操作.
关于这一点,我决定创建一个单独model class的处理数据库操作.这个类必须将执行SQLite的命令后返回我的数据的所有方法(例如选择)将只是执行命令的SQLite(删除为例).但我想要的是将这个类与Database Adapter类分开,在那里打开,创建和关闭我的数据库.
让我把我的概念放到代码中:

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

*/
}  
Run Code Online (Sandbox Code Playgroud)

// 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);
}
}  
Run Code Online (Sandbox Code Playgroud)

问题:
我想问的是这是正确的实施方法吗?如果为数据库方法创建单独的类,这样可以吗?您认为哪些限制或问题可能会让我后来困扰?另外,有没有更好的方法来实现上述概念?

谢谢
Stone

Nik*_*kov 11

您所称的"模型类"通常称为数据访问对象(DAO).您的模型通常是一组包含数据和业务逻辑的类.在您的情况下,可能是Student具有ID,名称,GPA等属性的类.如果要将数据访问与模型分开,则可以使用数据访问类(DatabaseHelper)查询数据库并使用它获取的数据来返回Student对象或a List<Student>.将数据访问类与数据库帮助程序分离并没有多大意义,最好将所有与数据库相关的代码放在一个地方.

但是,在Android上使用模型类(仅限)可能并不总是实用,因为它本身支持从Cursor(CursorAdapter等)获取和显示数据.如果要使用其中的任何一个,则必须将数据公开为模型对象,而不是Cursor.至于内容提供商,也要看一下这些,但如果你不需要将你的数据暴露给其他应用程序,那么编写一个ContentProvider可能有点过分.

另外,您不希望在每个查询上打开和关闭数据库.将它保持打开实际上是安全的,当应用程序的进程终止时它将自动关闭.