java - MVC 实践下何时创建新的类/arrayList 与何时仅依赖数据库

标签 java android sqlite model-view-controller arraylist

我正在尝试遵循模型- View - Controller 实践来学习应用程序开发。

现在我很难弄清楚如何在数据库中存储内容与查看/处理相关的类之间取得平衡。

例如,我的应用程序允许您创建配置文件。我有一个 SQLite 数据库,其中保存了表中的所有名称。

但是这对我来说感觉很有趣。例如,如果我想填充 ListView使用配置文件名称,我必须创建一个 ArrayList<String> ,用数据库中的配置文件名称填充它(通过光标),然后通过 ArrayAdapter<String> 设置它.

也许这一切都很好,但对我来说这感觉很有趣,因为我不使用像 Profile 这样的东西。类(class)。现在这样的类只能容纳 private String mProfileName并且有一些 getters/setters,但是如果我已经拥有存储所有内容的数据库,那么这个类是否就不需要了?

我很困惑我是否应该拥有 private ArrayList<String> mProfileNames我的 Activity 类中的成员变量,或者我是否应该瞄准 private ArrayList<Profile> mProfiles相反,如果不需要首先拥有这样的数组列表,因为所有数据都在数据库中,所以我只需要在与适配器/ ListView 一起使用的函数中实例化一个数组列表-设置等

因为如果我确实有一个私有(private)成员变量将所有这些名称​​此外保存到数据库中,那么我必须担心确保任何时候我以任何方式更新数据库(添加/删除/等),我也以同样的方式更新数组列表,出于某种原因,这感觉像是一种不好的做法/风险。

或者也许我使用 Profile 类来封装 SQL 函数而不是我的 Activity ?

在此示例中,我确实可以使用一些正确方向的指针来正确实现 MVC 实践。

最佳答案

I have a SQLite database that holds all the names in a table.

所以,你有一个SQLiteOpenHelper创建一个“配置文件名称”表。

一个Profile对象可以用于封装数据,但如果只有一列,则没有必要。

如果您要添加更多数据,请执行 cursor.getColumnValue(0...n)对于所有人n每次从表中读取数据时都列不是一个好习惯。

有一个静态方法 Profile p = Profile.fromCursor(cursor)使之更干净,然后您可以使用 String name = p.getName(); ,例如,对于 Profile 的所有实例变量。之后,您将拥有一个完整的对象,您可以修改并定义类似 profileDBHelper.upsert(p); 的方法。从您的 SQLiteOpenHelper 进行插入或更新。

maybe I use a Profile class to encapsulate the SQL functions instead of my activity?

不是 Profile类,没有。这就是模型。它只存储数据,不处理数据。您应该将所有与数据库相关的读写操作都实现到 SQLiteOpenHelper 中实例而不是 Activity 。其他示例方法可以是 boolean contains(String name) , List<String> getAllNames() ,和boolean delete(String name)

<小时/>

I'm confused as to whether or not I should have a private ArrayList<String> mProfileNames member variable in my activity class, or if I should aim for a private ArrayList<Profile> mProfiles member variable in my activity class instead.

如果你只有一个字符串(数据库中只有一列),那么只有 ArrayList<String> 没有任何问题。 。

<小时/>

I have to worry about making sure that any time I update the database in any way (adding/removing/etc), I also update the arraylist in the same way

然后只需更新数据库,清除ArrayList,重新查询并重新填充列表即可。不用担心更新 ArrayList 中的记录。

<小时/>

properly implement MVC practice in this example

总的来说,Activity 应该只显示 ListView 中的数据 (V)。它调用 SQLiteOpenHelper 的方法(C),它以 Profile 的形式返回数据。或String (M) 显示。

关于java - MVC 实践下何时创建新的类/arrayList 与何时仅依赖数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36183152/

相关文章:

java - Android如何检测网络类型改变事件?

java - 不能影响声明的变量

SQLite:仅当价格与最后一行不同时插入

sql - "people you may know"sql查询

java - JVM内存管理

java - 在 java 中查询 xml 的最快方法

java - 什么是 SwingUtilities.invokeLater

android - REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 如何正确执行

android - 无法在android studio中播放视频

java - 如何优化这个?