Android 为什么存储库发送给ViewModel的构造函数?

Android 为什么存储库发送给ViewModel的构造函数?,android,mvvm,viewmodel,Android,Mvvm,Viewmodel,我正在用MVVM研究谷歌架构组件,注意到存储库发送给ViewModel的构造函数。问题是为什么存储库不能作为属性字段存在于ViewModel?一些开发人员创建存储库的工厂,并用它初始化ViewModel。这样做的原因是什么MVVM告诉我们,View根本不需要了解Model。那么,为什么存储库不只是停留在ViewModel作为一个字段 总的来说,这是一种糟糕的做法。更好的方法是在ViewModel中注入,以实现更好的测试。通常,存储库在ViewModel的生命周期内不会更改。将其作为contrus

我正在用
MVVM
研究谷歌架构组件,注意到存储库发送给
ViewModel
的构造函数。问题是为什么存储库不能作为属性字段存在于
ViewModel
?一些开发人员创建存储库的工厂,并用它初始化ViewModel。这样做的原因是什么
MVVM
告诉我们,
View
根本不需要了解
Model
。那么,为什么存储库不只是停留在
ViewModel
作为一个字段

总的来说,这是一种糟糕的做法。更好的方法是在ViewModel中注入,以实现更好的测试。

通常,存储库在ViewModel的生命周期内不会更改。将其作为contrustor的参数而不是属性提供可以确保它不能更改,并且ViewModel中的代码可以依赖它


如果它是一个属性,则可以在ViewModel的生存期内对其进行更改。您的代码可以从一个数据库加载对象,并在需要保存时找到指向另一个数据库的存储库。

视图仍然不需要了解存储库……它通常通过
ViewModelFactory
传递到
ViewModel
,然后注入到视图中(使用类似于匕首的东西)。如果您使用Koin,此交互会稍微简化。问题是为什么
ViewModel
在构造函数中特别需要存储库?是什么阻止存储库作为属性存在于ViewModel中?它实际上是一个属性。您的问题更多的是关于如何/在何处实例化它的?如果是,您理想情况下不希望实例化i例如,外部注入意味着您可以在测试库期间插入存储库的模拟实现。我只是想知道如何在ViewModel中保留存储库的最佳实践。如果在ViewModel中内部实例化存储库,会出现什么样的困难?主要问题是您您无法轻松配置要在ViewModel中使用的存储库的不同实例……例如,在前面提到的对ViewModel进行单元测试的情况下,您通常希望注入存储库的模拟实现。通过构造函数注入,还是您假设项目必须使用某种依赖项注入?