代码A来自https://github.com/android/architecture-components-samples/tree/master/PagingWithNetworkSample
代码B来自https://github.com/android/architecture-components-samples/tree/master/PagingSample
我知道当我需要使用AndroidViewModel
来实例化基于数据库的Room(如代码B)时,应该使用ViewModel
而不是Context
。
我发现代码A中的类SubRedditViewModel
没有继承自AndroidViewModel
,它使用构造函数传递了参数repository
。
将参数repository
传递给ViewModel
而不是继承自AndroidViewModel
是个好主意吗?
代码A
class SubRedditViewModel(
private val repository: RedditPostRepository,
private val savedStateHandle: SavedStateHandle
) : ViewModel() {
...
}
代码B
class CheeseViewModel(app: Application) : AndroidViewModel(app) {
val dao = CheeseDb.get(app).cheeseDao()
...
}
答案 0 :(得分:3)
继承AndroidViewModel
后,由于您依赖Android框架,因此您的类无法进行单元测试。另外,在代码段B中,您失去了为dao
注入双倍测试的能力,从而使测试更加困难。
最后,请尝试避免使用框架类并练习依赖项注入(手动或借助Dagger这样的DI框架都没关系)。因此,您最好使用代码段A。