mvvm简单介绍
mvvm简单介绍首先也是和mvp一样的三层结构,model,view,viewModel的三层,其实就是把mvp的presenter层改成了viewModel层,其他的不变。不过具体为什么需要这样子改呢,可以先看完viewModel的代码之后再作对比。
代码同样用的之前的mvp结构学习博客,就是构建一个recyclerview显示内容。关于mvp结构的学习与demo
原先的presenter层代码:
override fun attach(view:TestContracts.View){
//开启子线程;
}
override fun onItemClick(position:Int){}
改成viewModel层之后:
private val testModel2=TestModel2() private var _dataList=MutableLiveData>() val dataList=_dataList override fun attach(){ testModel2.getHotList() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(object : Observer
?>{ override fun onSubscribe(d : Disposable){} override fun onNext(t : List
){ _dataList.value=t.onEach{ it.hotValueShowText=it.hotValue } } override fun onError(e : Throwable){} override fun onComplete(){} }) }
这里的viewModel是把具体内部写的也展示出来了,主要是想展示的是下面这两行的原因。
private var _dataList=MutableLiveData>() val dataList=_dataList
因为mvvm不像mvp一样,presenter层拥有对view层的引用,而是view层单独持有对viewModel层的公有数据等等,所以这里也是把传入Recyclerview的数据数组先做了个私有属性,用于viewModel层内部能够改变,而这公有的datalist是会被view层所使用的,所以这样的方式即便view层对这个数组做了什么改变,也不会影响到viewModel层的变化。这样子也就是mvvm经常说的优点所在——耦合度更低。所以这种模式也是合作项目最受青睐的模式,三个层的独立不仅代码的读写方便,测试bug的时候断点也更加容易。当然函数内部的写法也就是简单地使用了一个Rxjava的线程切换,之后应该也会把自己对Rxjava的学习笔记记录下来。



