Android Room 数据库项目中的单个或多个 DAO 和存储库?

Single or multiple DAO and Repository in Android Room database project?

我有一个 Room 数据库项目,数据库中的每个 table 都有一个 DAO 和一个存储库(不同数据源之间的中介)。要记住很多文件和 class 个名称。

我想知道每个项目使用单个存储库和 DAO class 是否有缺点?

没有这样的规则,您必须为每个 table 创建单独的 @Dao。你可以创建一个 Dao class 来保存你所有的数据库查询。

@Dao
interface MyDao{
    @Query("SELECT * FROM Student")
    fun getStudents(): List<User>

    @Query("SELECT * FROM Professors")
    fun getProfs(): List<User>
}

但是按照惯例,您为每个实体创建单独的 Dao。这样你的代码就会组织起来,仅此而已。如果您在同一个 Dao 中有一堆不相关的查询,则很难审查您的代码。

对于存储库,我会有不同的方法。虽然没有这样的规则,你必须使用单独的存储库或单个存储库,我会在我认为有必要的地方使用两者。

例如,如果我只有一个来自 User table 的数据库调用和一个来自 Post table 的数据库调用,我看不出有两个独立的意义每个 table 的存储库。所以在这种情况下我只会创建一个存储库。但另一方面,如果我有来自 User table 的 10 个数据库调用和来自 Post table 的 10 个数据库调用,我将拆分存储库并有两个存储库,每个存储库一个 table。

总而言之,这些只是约定,以上只是建议的编码风格。