gpt4 book ai didi

java - 如何在不打破MVP模式的情况下使用Room?

转载 作者:行者123 更新时间:2023-12-01 17:17:43 37 4
gpt4 key购买 nike

我在应用程序中使用 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/

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