gpt4 book ai didi

java - 在具有许多模型对象的 Android 应用程序中,CRUD 操作应该放在哪里?

转载 作者:行者123 更新时间:2023-12-02 03:33:42 24 4
gpt4 key购买 nike

在我的应用程序中,我有许多 Java 模型对象(我相信您通常将它们称为 POJO?),并且我有一个扩展 SQLiteOpenHelper 的中央数据库单例类 (DatabaseHelper)。

我的问题:我不确定该把东西实际放在哪里。现在我已经将所有内容放入 DatabaseHelper 类中,并且它变得越来越大。

这让我重新思考我的方法,也许我需要将事情分开。

我是否应该将数据库 CRUD 操作放在一个专用类中,作为模型对象和 DatabaseHelper 之间的桥梁?或者我应该在模型对象本身中耦合 CRUD 方法?那么在哪里存储表名和列名等内容呢?

这里什么是公认的做法?

最佳答案

如果您的数据库中有大量表(我认为您在提出问题后就这样做了),我建议您将所有 CRUD 逻辑放入名为 的单独类中>存储库(例如 ModelRepository)。

这些类应该具有所有必要的东西,并且最好通过具有 C R UD 方法的接口(interface)来实现,这样如果实现需要经过一些改变,由于接口(interface)的使用,一切都保持正常。因此,对于每个模型,您都需要 2 个类,ModelRepositoryInterface,它甚至可以使用这 4 个操作扩展一个公共(public)接口(interface),并且每个类都可以有一些特定于该类本身的附加方法;以及实现该接口(interface)的类,例如 ModelRepositoryImplementation

一些基本示例,假设您的模型名为类(class):

public class Course {
//your class logic, constructor, getters, setters, etc.
}

这将是它的存储库接口(interface):

public interface CourseRepositoryInterface {
void addCourse(Course course);
void deleteCourse(Course course);
void updateCourse(Course course);

List<Course> getAllCourses();
}

类似这样的东西,当然它可以根据您的需要有更多/更少的方法。

最后,您需要一个实现该接口(interface)的类,例如:

    public class CourseRepoWithMySqlDatabase implements CourseRepositoryInterface {
void addCourse(Course course) { //TODO: Implement it }
void deleteCourse(Course course) { //TODO: Implement it }
void updateCourse(Course course) { //TODO: Implement it }

List<Course> getAllCourses() { //TODO: Implement it }
}

在此类中,您将实现方法来执行它们需要执行的操作,例如,MySql 数据库。如果您需要从 MySql 切换到其他类型的数据库或无数据库实现,您只需使用另一个类来实现接口(interface),并将其传递到需要接口(interface)参数的位置强>.

Pay attention: this is very important. You always need to require the interface in the place where you plan to use its methods.

关于java - 在具有许多模型对象的 Android 应用程序中,CRUD 操作应该放在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37714482/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com