首页 > 解决方案 > SharedViewModel 是否违反单一职责原则?

问题描述

我有一个活动和 4 个片段,我有 SharedViewModel 可以帮助我将数据从 Activity 传递到所有其他片段

                             Activity
                                |
                          SharedViewModel
                                |
         ----------------------------------------------------
         |               |                |                 |
      (Fragment A)   (Fragment B)     (Fragment C)    (Fragment D)

现在在这里您可以看到 SharedViewModel 具有 Activity 以及所有 Fragment 的数据。因此,一个 SharedViewModel 包含 5 个不同类的变量和函数,如 LiveData 等变量、其他数据库相关函数或一些网络操作相关函数。

1) 只使用一个函数作为公共在所有类之间共享数据。

2) 其他功能是所有其他类的单独功能。

那么这是否违反单一责任原则?如果没有那怎么办?

标签: androiddesign-patternsandroid-viewmodel

解决方案


MVVM单一职责原则可以参考存储库模式,您可以在存储库模式中使用ViewModel.

所以想象一下,ViewModel它只负责从 UI 到 Repository 的每个数据请求,提供从 Repository 到 UI 返回的响应

另一方面,Repository 只关心提供数据,而最终它是来自本地数据库还是来自 API 调用都无关紧要。

所以,这就是为 MVVM 派生单一职责的方式。


现在,对于您的架构,只要您为每个 UI (Activity/Fragment)提供数据更新,就可以100%好,因为每个组件通常共享和观察,这可以被认为是普遍的。SharedViewModelLiveData

如果您放置一个数据持有者( LiveData) / 变量,它可以被视为仅依赖于一个 UI,那么您应该ViewModel为该 UI 使用个人,

所以关于第二点,“其他功能是所有其他类的单独功能。” 我建议您ViewModel单独创建与您的 UI 相关的 sShareViewModel并尽可能简单和小巧,这样您就不会将您的一个 UI 操作暴露给其他人。


推荐阅读