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