我有一个活动和4个片段,我有SharedViewModel,它可以帮助我将数据从Activity传递到所有其他片段
Activity
|
SharedViewModel
|
----------------------------------------------------
| | | |
(Fragment A) (Fragment B) (Fragment C) (Fragment D)
现在在这里您可以看到SharedViewModel具有Activity和所有Fragment的数据。因此,一个SharedViewModel包含5个不同类的变量和函数,例如LiveData等变量,其他与数据库有关的函数或与某些网络操作有关的函数。
1)仅使用一个函数作为公共类在所有类之间共享数据。
2)其他功能是所有其他类的单独功能。
这是否违反了单一责任原则?如果没有,怎么办?
答案 0 :(得分:1)
单一职责原则,以了解使用ViewModel
将数据公开到UI的存储库模式。
因此,假设ViewModel
仅负责从UI到存储库的每个数据请求,并提供从存储库到UI的响应。
另一方面,存储库只关心向后提供数据,而最终无论是来自本地数据库还是来自API调用都无关紧要。
因此,这就是可以为MVVM导出单一职责的方式。
现在,对于您的体系结构,只要您的SharedViewModel
仅向每个UI (活动/片段)提供数据更新,就可以 100%可以通过LiveData
视为在每个组件中共同共享和观察的对象。
如果您放置一个数据持有人(LiveData
) /变量,该数据持有人可以被认为仅依赖于一个UI,那么您应该对该UI使用单个ViewModel
,< / p>
关于第二点,“其他功能是所有其他类的单独功能。” 我建议您分别创建与您的UI相关的ViewModel
,并制作{{1} }尽可能的简单和微小,这样您就不会向其他用户公开您的一个UI操作。