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
。
如果说大致的数据流向,可以用一张简单的流程图来表示:
这幅图大致表示的是:数据来源可以有多种,比如来自数据库,网络请求等。然后对数据源的全部操作,隔离在Repository
, 然后界面可以有多个,每个界面对应一个ViewModel
, 所有数据相关的操作,就是放在ViewModel
里面,Activity
只负责界面的findviewbyid, setText(text)
这样的操作。然后这里的text
是从ViewModel
里面拿到的。不管是主动还是被动,反正都是通过回调拿到数据然后显示出来。
mvvm 跟 Android Jetpack 没有直接的关系。完全可以使用 RXJAVA 来做。
近期我会基于 wanandroid API 来使用 mvvm .
说来惭愧,我还没有使用过 mvvm 呢。 [也没有使用过mvp~]