java - Activity 应该直接访问 sqlite 数据库还是应该有一个中介类?

标签 java android model-view-controller sqlite object-oriented-database

我已经对 SQLiteOpenHelper 进行了子类化,并且代码的所有组件都可供使用。问题是,允许任何 Activity 直接访问主数据库类中的公共(public)方法,这真的是一个好的设计吗?

我遇到的情况是,我的 Activity 将根据从数据库获取的信息在其布局中填充信息 - 本质上是在运行时动态创建的。因为我将从数据库返回多行,这意味着我将拥有一个数组,其中包含获取所有信息所需的任何内容。

所以像这样:

 //in Main Activity Class
 private class menuItems{

    String category_name;
    int category_id;
    int menuItem_id;
    String menu_title;
    String menu_desc;
    String price;
    int icon;
}

  //ArrayList in Main Activity
   ArrayList<menuItems> menu = new ArrayList<menuItems>();

我的 Activity 需要这个“结构”作为自己的 - 以便它可以从数据库接收信息 - 类似于 getAllMenuItems(), - 此方法将执行选择语句,将信息放在一起就是它自己的“结构”并将其返回到主要 Activity 。然后在 Activity 中使用此信息来构建布局/ View 等。

如果我最终有一个中介类来与数据库对话,那么该类也需要在其中定义相同的“结构”。如果有这样的设计会更好吗:

主要 Activity

DatabaseAccessor - 调用公共(public) DatabaseHelper 类(根据 MainActivity 的请求)

DatabaseHelper(SQLiteOPenHelper的子类,执行所有数据库查询)

我想设计一些类似于 MVC(模型- View - Controller )的东西,但我想知道你们对此在 Android 应用程序中的实用性有何看法。

谢谢!

最佳答案

一般来说,让 Activity 和数据库尽可能地相互解耦是一个好主意。这使您能够通过创建一个类来访问数据源来更改数据源,而无需更改用于呈现数据的代码。

所以,是的,我绝对会有一个单独的类来访问数据,以及一个单独的类来允许将数据传递给 Activity 。在这种情况下,我还将遵循德米特定律,并提供访问或更改底层数据所需的任何功能,而不实际提供对底层数据库的访问。

关于java - Activity 应该直接访问 sqlite 数据库还是应该有一个中介类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9674929/

相关文章:

java - Listview为单个项目设置颜色按位置当对话框打开时

android - adb 服务器版本与此客户端不匹配

android - 打开 Google Plus 应用程序的二维码

c# - MVC- View 未将模型列表值传递回 Controller

java - 有什么方法可以在 Java 应用程序的用户之间划分服务器资源?

java - 在测试类的其他方法中使用对象

java - ECDSA 使用 HSM 签名并在 Java/Kotlin 中验证

javascript - javascript 无法从 jsp 获取数据

php - MVC 框架中的缓存策略?

c# - 通过ajax将模型发布到 Controller 为空