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

时间:2011-08-03 05:31:04

标签: android database model-view-controller sqlite datamodel

当我意识到应该实现MVC模式时,我刚刚开始研究数据库应用程序,因为应用程序非常复杂并涉及许多数据库操作。
关于这一点,我决定创建一个单独的model class来处理数据库操作。该类将具有在执行Sqlite命令后返回数据的所有方法(例如,选择) OR 将简单地执行SQ​​Lite命令(例如,删除)。但我想要的是将这个类与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

*/
}  

// 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);
}
}  

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

感谢

3 个答案:

答案 0 :(得分:11)

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

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

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

答案 1 :(得分:1)

我在我的应用程序中执行此操作并且它工作得非常好,代码很干净并且它根本不会影响性能,特别是对于今天的硬件手机。我尝试了所有其他方法,甚至使用了内容提供商,但在我看来,这只是复杂的事情。

答案 2 :(得分:0)

android的原生方法数据建模是内容提供者。 Link

它也抽象了数据源的类型。

我曾经以类似的方式做到这一点。但同样它也是主观的。