LiveData 是否必须存在于存储库中?

Does LiveData have to exist in the Repository?

我是学习 MVVM 设计模式的初学者。

Google CodeLab等示例代码,出现问题

如题所示,LiveData一定存在于Repository中吗?

到目前为止,我一直在 ViewModel 中使用和观察 LiveData。 (没有什么特别的原因,就是什么都不懂就用了)

顺便看了下Google CodeLab的代码研究Room,看到在LiveData(或Flow) =13=] 并在 LiveData of the ViewModel.

中引用它

其他网站的示例代码类似。

但我不知道为什么 LiveDataRepository 中并使用它的引用方式。

由于LiveDataCodeLab等官方文档的代码中的Repository中使用了LiveData,所以我是照着用的,不知道为什么。

MVVM模式中,LiveData一定存在于Repository中吗?如果您能解释原因,我将不胜感激。

LiveData 只是一个可观察的数据持有者。它具有生命周期感知能力,因此使用它从 ViewModel 向 View 提供数据是一种很好的做法。 LiveData 现在可以用 Flow 代替,这比 LiveData.

没有什么好处

RepositoryViewModel,是否要LiveData/Flow完全取决于你 returned 或简单地 return 您期望从 DAO 获得的模型,但如果您想要,您仍然需要 LiveData/Flow在从 Repository 接收到 ViewModel.

的模型后,将该模型提供给 View

MVVM 模式更多的是关于设计软件,并将架构组织成不同的层。视图是 user-facing 前端,模型是处理数据的后端。

视图模型位于它们之间,将模型中的数据转换为视图可以显示的某种形式的 UI 状态,并将按钮按下等 UI 事件转换为对应用后端函数的调用, 在模型中。

LiveDataFlow(它们很相似——一种是 Android,一种是 Kotlin)是公开数据的方式,这最终是模型所做的——产生数据。他们能够提供 stream 数据,而不是仅仅根据请求提供单个值。

View Model(它是 Model 和 View 之间的中介——它们不相互交谈)可以接受 LiveDataFlow,并将其直接暴露给View,或者对其进行一些处理以产生适合View显示的数据。这样你就有了从数据生产者(模型)到 UI(视图)的管道。这基本上就是 MVVM 的一般工作方式,这只是使用 streaming/producer/reactive 模型来连接事物并使异步操作之类的事情变得更简单

这值得一读,它明确提到存储库是该模型中的数据生产者: https://developer.android.com/kotlin/flow