【问题标题】:MVVM: Complex View/ViewModel -> Multiple LiveData objects?MVVM:复杂视图/视图模型-> 多个 LiveData 对象?
【发布时间】:2019-04-10 15:40:00
【问题描述】:

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

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

正如我在其他地方看到的,多个 ViewModel 对象是一种糟糕的模式。

所以,在我看来,有两种解决方案:

  1. 创建一个包含所有其他数据对象的单个对象(及其单个 LiveData)。
    但这有一个问题——每个更新的数据对象都会导致整个 UI 更新。

  2. 创建多个对象(并为其创建多个 LiveData 对象)。
    这意味着我需要观察每个 LiveData 对象。这种模式有问题吗?

提前致谢!

【问题讨论】:

    标签: android mvvm android-livedata


    【解决方案1】:

    您提到的第一点:是的,这不是最佳模式,但是如果您有少量数据,那么分离 LiveDatas 的工作量更大,收益更少

    您提到的第二点: 是的,这是更优化的,您可以为每个要更新的 View 设置一个 LiveData 对象,并从您的活动或片段中观察它们。此模式没有问题。

    关于多视图模型: 如果您在一个 ViewModel 中发生了太多事情(LiveData 对象或函数),那么在同一个 Activity/Fragment 中使用多个 ViewModels 模式也是一种选择。仅建议使 viewModel 更轻。所以只有当你有一个大的 viewModel 类时才使用它

    【讨论】:

    • 第二点是否与从单个 Viewmodel 观察不同的实时数据相同? viewModel.getUserList().observe(this, new Observer>()... viewModel.getUserDetailsList().observe(this, new Observer>()... 等等。 .. 从片段/活动来看,上面的实现很好?
    【解决方案2】:
    1. 为离散类型的信息创建ViewModels。

    例如,您可以有一个 UserViewModel 来处理有关 User 的所有状态。这意味着您可以在另一个上下文中使用相同的ViewModel,而无需提取可能不需要的数据(就像您有一个上帝ViewModel 一样)。

    1. 根据需要创建尽可能多的 LiveData 对象来为视图建模。

    如果可能,最好将数据压缩成逻辑对象。如果只是为了使事情易于管理。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-24
      • 2019-10-03
      • 1970-01-01
      • 1970-01-01
      • 2012-07-22
      • 2011-11-15
      相关资源
      最近更新 更多