SharedViewModel是否违反单一责任原则?

时间:2020-03-30 07:47:45

标签: android design-patterns android-viewmodel

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

可以参考 MVVM

单一职责原则,以了解使用ViewModel将数据公开到UI的存储库模式。

因此,假设ViewModel仅负责从UI到存储库的每个数据请求,并提供从存储库到UI的响应

>

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

因此,这就是可以为MVVM导出单一职责的方式。


现在,对于您的体系结构,只要您的SharedViewModel仅向每个UI (活动/片段)提供数据更新,就可以 100%可以通过LiveData视为在每个组件中共同共享和观察的对象。

如果您放置一个数据持有人LiveData /变量,该数据持有人可以被认为仅依赖于一个UI,那么您应该对该UI使用单个ViewModel,< / p>

关于第二点,“其他功能是所有其他类的单独功能。” 我建议您分别创建与您的UI相关的ViewModel,并制作{{1} }尽可能的简单和微小,这样您就不会向其他用户公开您的一个UI操作。