活动是否应该直接访问SQLite数据库,或者应该有一个调解员课吗?
-
12-12-2019 - |
题
我有Sqliteopenhelper,并拥有准备好的代码的所有组件。问题是它是非常好的设计,允许任何活动都可以直接访问主数据库类中的公共方法。
我有一个情况,即我的活动将根据它从数据库获取的信息 - 基本上在运行时动态创建的信息,以其的情况将在其布局中填充信息。由于我将从数据库中有多行回来,这意味着我将有一系列我需要获得所有信息。
所以这样的东西:
//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>();
.
我的活动需要这个“struct”作为自己的“结构” - 以便它可以从数据库中收到信息 - 类似于getAllMenuItems()的信息, - 如果此方法执行Select语句,则将信息放在一起是它自己的“结构”并将其返回主要活动。然后在活动中使用此信息来构建布局/视图等。
如果我最终有一个Mediator类来与数据库交谈那么那个类也需要在其中定义相同的“struct”。有更好的设计是有类似的东西:
主动力
databaseaccessor - 呼叫公共数据库霍尔类(每个来自捕获行的请求)
databasehelper(子类Sqliteopenhelper,执行所有数据库查询)
我想沿着MVC线(模型 - 视图 - 控制器)设计一些东西,但我想知道你们在Android应用程序中考虑了这一点的实用性。
谢谢!
解决方案
一般来说,使活动和数据库尽可能彼此分离是个好主意。这允许您能够通过创建类来访问数据来更改数据源,无需更改您用于呈现数据的代码。
所以,是的,我绝对会有一个单独的类来访问数据,以及一个单独的类,以允许将数据传递给活动。在这种情况下,我还将遵循demeter的法律,并提供访问或更改底层数据所需的任何功能,而无需实际提供对基础数据库的访问。
其他提示
结论 - 认为具有与GUI分开的数据库是一个智能移动,以防我想再次使用任何其他活动使用DB类。