我正在我的应用程序中使用Room数据库,并且试图遵循MVP模式,因此我想使用演示者来调用执行数据库操作的函数。需要一个Android应用程序上下文来获取数据库引用,因此在我称为“视图(活动)”中:
AppDatabase db = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, "AppDatabase").build();
AppDatabase
是扩展RoomDatabase
的抽象类,具有一堆android
导入并且包含DAO
接口。此设计来自Android的官方指南。
现在,如果我在演示者中传递并使用了AppDatabase
对象(或DAO
接口,因为它实际上包含数据库操作方法,那么它会破坏MVP模式吗? DAO包含SQL查询并具有大量的android导入,其方法类似于dao.insert(item)
。
编辑:
[AppDatabase
类和ItemDao
接口:
@TypeConverters({Converters.class})
public abstract class AppDatabase extends RoomDatabase {
public abstract ItemDao itemDao();
}
@Dao
public interface ItemDao {
@Query("SELECT * FROM item")
List<Item> getAll();
@Query("SELECT * FROM item WHERE date BETWEEN :from AND :to")
List<Item> findItemsBetweenDates(LocalDate from, LocalDate to);
@Insert
void insert(Item... items);
}
不,只要依赖项从View(活动或片段)传播到Presenter,就不会破坏MVP结构。最好公开DAO而不是应用程序数据库。
我还建议将AppDatabase类文件添加到您的帖子中,以使其更加明确。