在我的应用程序中,我有许多Java模型对象(我相信你通常将它们称为POJO?),我有一个扩展SQLiteOpenHelper的中央数据库单例类(DatabaseHelper)。
我的问题:我不确定在哪里放东西。现在我已经将所有内容都放入了DatabaseHelper类中,而且它变得越来越大。
这让我重新思考我的方法,也许我需要把事情分开。
我是否应该将数据库CRUD操作放在专用类中,该类充当模型对象和DatabaseHelper之间的桥梁?或者我应该在模型对象本身中耦合CRUD方法?如何存储表格和列名称等内容?
这里被认为是什么被接受的做法?
答案 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切换到另一种类型的数据库或无数据库实现,您只需使用另一个类来实现该接口,并将其传递到需要接口参数的位置强>
注意:这非常重要。您总是需要在计划使用其方法的地方要求接口。