我正在尝试遵循模型- 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 aprivate 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/