定义ViewModel类的更好的MVVM方法是什么



我看过很多关于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永远不应该有依赖关系。

相关内容

最新更新