定义 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 方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
Prism MVVM:“没有为类型定义无参数构造函数”将 ViewModel 绑定到 View 时出错