我看过很多关于MVVM的教程。他们中的大多数人说,你需要这样定义你的ViewModel类:
class MainViewModel: ViewModel() {
...
}
但最近我偶然发现了谷歌的dagger教程项目。有一个不同的ViewModel类定义:
class MainViewModel(private val userDataRepository: UserDataRepository) {
...
}
所以我想知道,这两种方法之间有什么区别?
这不是一个相关的比较。CodeLab使用非ViewModel ViewModel类来简化他们对DI如何工作的解释。请注意,它没有将ViewModel子类化。此外,项目在启动时没有注入依赖项,并让您稍后添加它,因此启动项目并不是如何设计某个东西的好例子。
无论哪种方式,如果您有一个存储库,您都需要通过某种方式在ViewModel中获得对该存储库的引用。如果是通过构造函数,则必须在为此类构建的关联ViewModelFactory中获取对存储库的引用。如果你使用Dagger,你可能会让Dagger为你生成这个工厂并注入引用。
如果您的ViewModel不使用存储库,那么无论是否注入依赖项,您都没有任何理由在构造函数中使用存储库。许多基本的MVVM教程将从最基本的示例开始,即不需要参数的ViewModel。这并不意味着ViewModel永远不应该有依赖关系。