MVVM:复杂的View/ViewModel -> 多个LiveData对象?

5

大多数MVVM示例都处理非常简单的用户界面。

但是假设我有一个包含许多视图需要更新的活动(即大量数据)

根据我在其他地方阅读到的信息,多个ViewModel对象是一种不好的模式。

因此,我认为有两种解决方案:

  1. 创建一个单一对象(和单一的LiveData对象),该对象包装了所有其他数据对象。
    但是这会存在一个问题-每个更新的数据对象都会导致整个UI刷新。

  2. 创建多个对象(和多个LiveData对象)。
    这意味着我需要观察每个LiveData对象。 这种模式是否存在问题?

提前致谢!

2个回答

2

你提到的第一点:是的,这不是最佳的解决方案,但如果你的数据量较小,则分离LiveData会付出更多的工作而获得较少的利益。

你提到的第二点:是的,这更加优化,您可以为要更新的每个视图拥有一个LiveData对象,并从您的活动或片段中观察它们。这种模式没有任何问题。

关于多个ViewModels:在同一个Activity/Fragment中使用多个ViewModels模式也是一个选项,如果您在一个ViewModel类中有太多的事情(LiveData对象或函数)发生。这仅建议使viewModels轻便。因此,只有在您拥有大型viewModel类时才使用它。


第二个点是不是指从单个ViewModel观察不同的LiveData? viewModel.getUserList().observe(this, new Observer<List<UserEntity>>()... viewModel.getUserDetailsList().observe(this, new Observer<List<UserDetailsEntity>>()... 等等... 从片段/活动中实现以上内容是否正确? - Napolean

1
  1. 为不同类型的信息创建 ViewModel

例如,您可以拥有一个处理有关 User 的所有状态的 UserViewModel。这意味着您可以在另一个上下文中使用相同的 ViewModel,而不必拉取可能不必要的数据(如果您只有一个单一的 ViewModel,那么会这样做)。

  1. 创建尽可能多的 LiveData 对象来建模您的视图。

最好将数据压缩成逻辑对象,以使事情易于管理。

如果您有一个 User,则应该使用它作为您的 LiveData,而不是拥有一个用于电子邮件地址、显示名称、年龄等的 LiveData。这将使您的数据绑定变得更加简单。尝试将事物逻辑地分组在一起。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接