【发布时间】:2018-05-07 15:46:15
【问题描述】:
我有一个关于 android ViewModels 的架构问题:
假设在我的应用程序中,我有一个 Activity,里面有两个 Fragment(使用 Viewpager)。这两个片段做不同的事情(因此可能有自己的 ViewModel?),但它们也都需要各种相似的数据。
这是例如网络连接是否可用的状态(如果没有连接,两个片段会显示不同的错误 UI),或者是通过来自服务器的推送来的某些用户设置并同样影响两个片段。
这看起来像这样:
现在我的问题是在使用 ViewModels 时如何处理这种情况? 一个视图观察多个 ViewModel 是否很好,就像我有一个用于 Activity 的 ViewModel(保持两者都需要的状态)和一个用于每个片段的 ViewModel,就像这样:
这被暗示了 here 例如,但这不是一个好习惯,因为 relationship in MVVM 通常是
视图 n - 1 ViewModel n - 1 模型
但我不确定在我的情况下此类共享 LiveData 的正确位置在哪里?
【问题讨论】:
-
在我看来,您应该为每个需要执行“业务逻辑”操作的 Activity/Fragment 拥有一个 ViewModel。基本上是在 ViewModel 中操作数据,并显示在 View 中或保存到数据库中。
-
@joao86 是的,我知道。但是如何处理同一活动内同一级别的多个 Fragment 所必需的状态呢?
-
您可以将一个 ViewModel 用于多个 Fragment/Activity,否则您将不必要地重复代码和行为。
-
我在我的问题中提到了这一点,并将这两个方面联系起来。虽然有可能,但通常认为这是一种不好的做法,在 MVVM 中,视图应该只有一个 ViewModel。请参阅我的问题中的链接和文本。
-
这可能被认为是一种不好的做法,但重复代码和行为也被认为是一种不好的做法,这就是为什么它在 JAVA 中存在超类的概念。那么应该遵循哪一种良好的行为呢? :)
标签: android mvvm android-viewmodel