CRUD操作应该放在具有许多模型对象的Android应用程序中的哪个位置?

时间:2016-06-08 23:18:04

标签: java android database sqlite

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

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

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

我是否应该将数据库CRUD操作放在专用类中,该类充当模型对象和DatabaseHelper之间的桥梁?或者我应该在模型对象本身中耦合CRUD方法?如何存储表格和列名称等内容?

这里被认为是什么被接受的做法?

1 个答案:

答案 0 :(得分:2)

如果您的数据库中有足够的表格,我认为您提出这个问题,我建议您将所有 CRUD 逻辑放入名为存储库(例如ModelRepository)。

这些类应该包含所有必要的东西,并且最好通过具有 CRU D 方法的接口来实现,这样如果实现需要经历一些变化,由于界面的使用,一切都在继续。因此,对于每个模型,您需要2个类ModelRepositoryInterface,它们甚至可以扩展这4个操作的公共接口,并且每个类都可以有一些特定于类本身的其他方法;以及实现接口的类,比如ModelRepositoryImplementation

一些基本示例,我们假设您的模型名为Course

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

这将是它的存储库接口:

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

     List<Course> getAllCourses();
}

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

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

    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切换到另一种类型的数据库或无数据库实现,您只需使用另一个类来实现该接口,并将其传递到需要接口参数的位置

  

注意:这非常重要。您总是需要在计划使用其方法的地方要求接口。