Android 每个实体的 MVVM ViewModel 和存储库?

Android MVVM ViewModel and Repositories for each entity?

关于 Android 架构组件和 MVVM 模式,我有一些问题。

基于网络上的大多数示例,通常有简单的示例。

  1. 房间有一个实体
   @Entity
   public class User{
   ...
   }
  1. 有一个 DAO
    @Dao
    public interface UserDao{
    ...
    }
  1. 有一个存储库
   public class UserRepository{
    }
  1. 视图模型
    public class UsersListViewModel extends AndroidViewModel{
    ....
    }

现在让我们扩展它,例如 user 旁边有 user_accessuser_actions,因此有 3 个 table。

问题:

  1. 我为 Room 中的每个 table 创建实体。我应该为每个实体(userDao、userAccessDao、userActionsDao)设置 3 个 Dao,还是只是一个通用的 AppDao class?

  2. 存储库也是如此。整个应用程序的一个存储库或每个实体的存储库(RepositoryUser、RepositoryUserAccess、RepositoryUserActions?

  3. 如果我的应用有一个主 activity 和多个片段,我应该为每个片段创建一个 ViewModel 吗?

1

你应该有上下文 DAO,假设一个 UserDao 应该包含与用户相关的查询,如果你的应用程序中有帖子,你应该有一个 PostDao 来处理与帖子相关的所有内容。

2

存储库的逻辑相同,请记住 类 的单一职责原则,坚持该原则,您应该为每种实体(UserRepository、PostRepository...)建立存储库。

3

遵循所有被描述为 Jetpack 的新概念,您应该每个片段有一个视图模型,除非出于某种奇怪的原因您有两个片段需要完全相同的逻辑,而且这不太可能发生,因为 objective 的片段将被重复使用。