- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在应用程序中使用 Room 数据库,并且尝试遵循 MVP 模式,因此我想使用演示器来调用执行数据库操作的函数。需要一个 android 应用程序上下文来获取数据库引用,因此在 View ( Activity )中我调用:
AppDatabase db = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, "AppDatabase").build();
AppDatabase
是一个抽象类,它扩展了 RoomDatabase
,有一堆 android
导入并包含一个 DAO
界面。此设计来自Android官方指南。
现在,如果我传递并使用该 AppDatabase
对象(或 DAO
接口(interface),因为它实际上包含数据库操作方法),它会破坏 MVP 模式吗?在演示者中? DAO 包含 SQL 查询并具有大量 Android 导入,以及诸如 dao.insert(item)
之类的方法。
编辑:
AppDatabase
类和 ItemDao
接口(interface):
@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 ( Activity 或 fragment )传输到演示者,您就不会破坏 MVP 结构。公开您的 DAO 而不是应用程序数据库是个好主意。
我还建议将 AppDatabase 类文件添加到您的帖子中,以使其更加明确。
不要公开 DAO,而是创建 Repository 接口(interface),该接口(interface)从调用元素(可以是 PRESENTER、CONTROLLER 或 VIEWMODEL,无论您喜欢什么)抽象 DAO 和存储库的实现本身。这将使 Repository 仅依赖于 DAO 的公共(public) API 而不是其实现,使 DAO 仅依赖于它使用的 Entities,并使 Entities 成为完全自由的元素。
关于java - 如何在不打破MVP模式的情况下使用Room?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61351086/
我是一名优秀的程序员,十分优秀!