在 Android 上使用 MVVM 时,每个 Activity 是否应该有一个(且只有一个)ViewModel?

新手上路,请多包涵

MVVM 模式 中,ViewModel 包含业务逻辑并在需要更新时通知 View。它还通过有关用户事件的视图进行通知。

据我了解,每个模型都应该有一个关联的 ViewModel。所以,如果我们有以下模型:

  • 用户
  • 帐户

我们会有以下 ViewModel:

  • 用户视图模型
  • 帐户视图模型

但是,我找到的所有关于使用 MVVM 进行数据绑定的示例都使用单个 ViewModel 进行布局。最近,谷歌在 Architecture Components 中引入了 ViewModel 类。这让我相信一个 Activity 会有一个 ViewModel 可以连接到所有相关的模型:

用户/帐户 –> ActivityViewModel

如果我们想到 RecyclerView ,这会变得更加复杂。每个适配器项目本身都可以是一个 ViewModel,因此具有 RecyclerView 的 Activity 将在列表中有多个 ViewModel,并为剩余的视图内容加上一个主视图模型(假设它们需要来自 ViewModel 的信息)。例如:

在此处输入图像描述

在此示例中,我们有一个 Account ViewModel 列表和一个 UserViewModel。这将如何嵌入到单个 ActivityViewModel 中?

原文由 fhsilva 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 610
2 个回答

每个视图(Activity、Fragment 或自定义视图)应该有一个 ViewModel,有多个 LiveData,每个逻辑单元一个。在图像中,一个逻辑单元是用户数据,另一个逻辑单元是设置数据,因此您将在 ViewModel 中公开两个 LiveData。

使用多个 LiveData 查看

这些概念也可以在上一届 Google I/O 中推荐的 google 应用程序架构中看到,其中 Activity/Fragment 具有 1 个 ViewModel 和多个 LiveData:

在此处输入图像描述

原文由 Eduardo 发布,翻译遵循 CC BY-SA 4.0 许可协议

Google suggests that you use 1 ViewModel per View (ie, Activity or Fragment ) (see https://youtu.be/ Ts-uxYiBEQ8?t=8m40s ),然后在每个 ViewModel 中,您可以拥有不止一种类型的模型。但是,MVVM 原则是每个 ViewModel 只有 1 个模型类型,因此 Google 的介绍与此矛盾:/。我想您必须决定哪种方法更适合您的应用程序。

关于您提到的列表示例,您不会这样做,对于您将使用 分页库 的列表。您可以在我上面链接的视频末尾看到有关如何使用它的详细信息。

原文由 Franco 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏