定义 ViewModel 类的更好的 MVVM 方法是啥?

Posted

技术标签:

【中文标题】定义 ViewModel 类的更好的 MVVM 方法是啥?【英文标题】:What is the better MVVM approach to define a ViewModel class?定义 ViewModel 类的更好的 MVVM 方法是什么? 【发布时间】:2021-12-28 19:17:45 【问题描述】:

我看过很多关于 MVVM 的教程。他们中的大多数人说你需要像这样定义你的 ViewModel 类:

class MainViewModel: ViewModel() 
    ...

但最近我偶然发现了来自 Google 的 Dagger tutorial project。有不同的 ViewModel 类定义:

class MainViewModel(private val userDataRepository: UserDataRepository) 
    ...

所以我想知道,这两种方法有什么区别?

【问题讨论】:

【参考方案1】:

这不是一个相关的比较。 CodeLab 使用非 ViewModel ViewModel 类来简化他们对 DI 工作原理的解释。请注意,它不是 ViewModel 的子类。此外,该项目在没有依赖注入的情况下启动,并且您稍后会添加它,因此启动项目并不是如何设计的一个很好的例子。

无论哪种方式,如果您有一个存储库,您需要某种方式来获取对您的 ViewModel 中的存储库的引用。如果是通过构造函数,则必须在为此类构建的关联 ViewModelFactory 中获取对存储库的引用。如果你使用 Dagger,你可能会让 Dagger 为你生成这个工厂并注入引用。

如果您的 ViewModel 不使用存储库,那么您将没有任何理由在构造函数中拥有一个存储库,无论是否使用依赖注入。许多基本的 MVVM 教程将从最基本的示例开始,即不需要参数的 ViewModel。这并不意味着 ViewModel 永远不应该有依赖关系。

【讨论】:

现在很清楚了。谢谢!

以上是关于定义 ViewModel 类的更好的 MVVM 方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何修复“无法创建 ViewModel 类的实例”?

Prism MVVM:“没有为类型定义无参数构造函数”将 ViewModel 绑定到 View 时出错

什么是mvvm?

Android MVVM在哪里存储数据?

Mvvm:如何更新我的ObservableCollection 从另一个ViewModel?

2022-03-17 WPF面试题 如何理解MVVM中的 View 和 ViewModel?