Activity 具有多个 ViewModel

Activity with multiple ViewModels

我有一个 Activity,其中包含 3 个 RecyclerViews。我需要使用远程存储库中的数据填充 RecyclerViews(3 个不同的请求)。我可以在 Activity 中使用多个 ViewModels,还是有更好的解决方案(最佳实践)。

在这种情况下,我建议使用一个视图模型来填充三个不同的 LiveData 对象。这样 UI 可以在您的三个请求之一得到响应时得到更新。有关如何将 RecyclerView 与 LiveData 一起使用的详细信息,请查看 Google Example.

我认为每个 activity 有多个视图模型只会增加复杂性,我认为这样做没有任何价值。

根据 the open/closed principle,您应该创建三个不同的 ViewModel。复杂性并没有增加那么多,并且您可以非常轻松地将一个 ViewModel(或只是重复使用它)和相应的 RecyclerView 移动到另一个 Activity

当然,有时打破规则是有道理的 - 例如,如果您知道 RecyclerView 不会被重复使用或移动到另一个屏幕,那么您可以使用一个更简单的解决方案ViewModel.

同样的情况,如果 ViewModel(即使有 3 个列表)可能总是非常简单(只有三个 LiveData 字段,只需几行代码来填充它们),你可以打破这个规则。

然而,违反 O/CP 并不是一个好的做法 - 这只是有意识地违反规则。

更简单的是,您可以拥有一个 ViewModel,它使用一项服务 class,后者又使用三个存储库来获取数据。例如:

XActivity --> XViewModel --> XService --> {Arepository, Brepository, Crepository}

我在片段中得到了两个 recyclerview。我认为使用两个 ViewModel 会更好。导致不同的 recyclerviews 有自己的数据请求,状态处理尤其是连接错误。 在这种情况下,分离成不同的 ViewModel 不会增加复杂性,但我认为它很符合 decupling

的规则