android - 每个屏幕有多个 View 模型

标签 android mvvm android-viewmodel android-architecture

开发者您好,我有一个问题希望您能帮助我。

我读到 Google 建议为每个屏幕建立一个 View 模型,屏幕可以与 View 模型通信以执行许多不同的操作。所以View Model会有很多职责,这与solid的S相悖。为每个屏幕提供必要的 View 模型以便每个屏幕都有单一的职责会好吗?

我相信这种多 View 模型方法将提高可重用性、封装性和 fragment 化;因为如果两个屏幕需要执行相同的操作,则无需重复相应 View 模型的代码或将相同的用例传递给两个屏幕。每个屏幕都会访问您需要的内容。

最佳答案

你问了一个很好的问题。 这些只是我的意见: 您提到了一个屏幕的多个 ViewModel(假设为“ View ”)和单一职责原则。 1:是的,您可以为一个 View 使用多个 ViewModel。但它在MVVM结构中并不典型。 2:ViewModel的主要目的是分离您的关注点,并且可以在不启动设备或模拟器的情况下测试应用程序的逻辑(在JVM级别运行) 3:SRP不仅仅是您在ViewModels中考虑的方式,让我给您举个例子:假设您想验证电子邮件或电话,...在您的ViewModel中,您可以创建一个遵循SRP的验证类(它有单一职责),现在您可以在 ViewModel 中需要的地方使用此类。定义遵循SRP的共享类、存储库或用例并在ViewModel中使用它们,而不是在 View 中定义多个viewModel,我相信每个 View 都有自己的viewModel。 在android中,viewModel也被设计用来保存 View 的数据。这意味着当您的配置更改时,您的 Activity 和 fragment 的数据不会被破坏。

希望这对你有帮助:)

关于android - 每个屏幕有多个 View 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72954823/

相关文章:

android - 如何从 android Activity 启动 Unity 应用程序?

c# - 什么时候在WPF中引发CollectionViewSource.Filter事件?

silverlight - 在 Silverlight 4 中创建 MVVM DataPager 的好方法是什么?

android - 删除在闭包内创建的实时数据 Observer

android - 有人有[Leap Motion Android SDK]副本吗?

android - 如何列出传递另一个 Activity 的图像

android - viewModelScope 默认为 MainThread 的原因是什么?

android - Kotlin CoroutineScope 初始化取决于带有自定义 getter 的 CoroutineContext

android - 在 Android 中效果最好的模拟库/框架?

c# - MVVM 将枚举绑定(bind)到组合框