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

Posted

技术标签:

【中文标题】为数据库处理创建数据模型类【英文标题】:Creating data model class for database handling 【发布时间】:2011-10-18 19:41:03 【问题描述】:

当我意识到我应该实现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

*/
  

//数据库适配器类

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

  

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

谢谢 石头

【问题讨论】:

【参考方案1】:

android 的原生方法数据建模是 contentproviders。 Link

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

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

【讨论】:

【参考方案2】:

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

但是,使用模型类(仅)在 Android 上可能并不总是可行的,因为它原生支持从光标(CursorAdapter 等)获取和显示数据。如果你想使用其中的任何一个,你将不得不公开你的数据,而不是作为模型对象,而是作为Cursor's。至于内容提供者,也可以看看这些,但如果您不需要将数据暴露给其他应用程序,那么写一个ContentProvider 可能会有点过头了。

另一方面,您不希望在每次查询时都打开和关闭数据库。让它保持打开实际上是安全的,当你的应用进程死亡时它会自动关闭。

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于为数据库处理创建数据模型类的主要内容,如果未能解决你的问题,请参考以下文章

如何将 NSObject 模型类转换为 NSManagedObject 的子类?

ADO.Net创建数据模型和数据访问类及泛型集合

Web API系列教程3.2 — 实战:处理数据(添加模型和控制器)

使用 Create ML 创建模型并在元数据中查找类

PowerDesigner 创建数据库模型自动生成模型类自动生成Sql脚本

数据库更新后模型类出现问题,