android:浅谈 mvvm 模式中的 ViewModel

Android Jetpack架构篇:带视图的Android Room—读后感

不同于 mvp , mvvm 与不使用框架的写法非常的类似,而且理解起来也相对简单很多。

简单的说,就是 界面上需要展示的数据,不是直接写在 View/Fragment/Activity这些界面组件里面,也不是写在Service这些系统组件里面。是放在 ViewModel里面的。

然后,并不是所有的数据操作相关的代码全部放在 ViewModel里面,比如数据库的增删改查,那是放在Dao里面的,但是Dao并不直接被View/Fragment/Activity/Service调用,而是被ViewModel调用。然后界面需要哪些数据,就从ViewModel里面去拿。

然后对于数据层的操作,还可以继续隔离。因为数据的来源不仅仅是数据库,也可能是网络,或者用户输入的。总之这些数据的操作,按照来源先进行区分,分成Dao(对应数据库),Net(对应网络)。然后这些数据操作的接口全部放在Repository里面。对于界面而言,有时候需要的不仅仅是获取数据,显示数据,有时候希望的动态更新。比如接收一个推送,或者数据库的插入更新,这些操作全部由Repository完成。 然后 Repository不是直接给界面调用的,是给ViewModel

如果说大致的数据流向,可以用一张简单的流程图来表示:

DAO
Repository
NET
用户输入
ViewModel-a
Activity-a/Fragemnt-a/View-a
ViewModel-b
Activity-b/Fragment-b
ViewModel-n
Activity-n

这幅图大致表示的是:数据来源可以有多种,比如来自数据库,网络请求等。然后对数据源的全部操作,隔离在Repository , 然后界面可以有多个,每个界面对应一个ViewModel, 所有数据相关的操作,就是放在ViewModel里面,Activity只负责界面的findviewbyid, setText(text)这样的操作。然后这里的text是从ViewModel里面拿到的。不管是主动还是被动,反正都是通过回调拿到数据然后显示出来。


mvvm 跟 Android Jetpack 没有直接的关系。完全可以使用 RXJAVA 来做。
近期我会基于 wanandroid API 来使用 mvvm .

说来惭愧,我还没有使用过 mvvm 呢。 [也没有使用过mvp~]

你可能感兴趣的:(android)