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

标签 android mvvm android-architecture-components android-jetpack

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

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

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

现在让我们扩展它,在 user 旁边有 user_accessuser_actions 例如,所以有 3 个表。

问题:

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

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

  3. 如果我的应用有一个主要 Activity 和多个 fragment ,我应该为每个 fragment 创建一个 ViewModel 吗?

最佳答案

1

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

2

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

3

遵循所有描述为 Jetpack 的新概念,您应该每个 fragment 有一个 View 模型,除非出于一个奇怪的原因,您有两个 fragment 需要完全相同的逻辑,而这不太可能发生,因为 fragment 的目标是被重复使用。

关于每个实体的 Android MVVM ViewModel 和存储库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50844781/

相关文章:

c# - Xamarin Android C# 计时器错误

android - 异步任务 http 发布?

java - Android 物理/电容式导航按钮

javascript - 如何为每个 Jasmine 测试重置 Knockout?

android - 来自 Transformation 的数据绑定(bind) LiveData - Android Kotlin

android - 以编程方式在 Kotlin 中自定义字体

silverlight-3.0 - 将多选列表框中的 SelectedItems 与 ViewModel 中的集契约(Contract)步

c# - 使用 MVVM 更改按钮 BackgroundColor

android - Flutter生成的3个APK有什么区别?

java - 将 Paging Library 3 与来自 Java 的 LiveData 结合使用