我已经对 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/