个人理解的一些东西,有所不当烦请指出
Mvvm简介:
mvvm是一种架构模式,与我们普遍使用的mvp不太一样,但是也有一些相同点,都是为了视图和数据的解耦,相比较来说,mvvm也正是从mvp演练过来的。
区别:
MVP: Model-View-Presenter
MVVM: Model-View-ViewModel
MVP
M:即model负责数据提供,可以是数据库,实体类,html文件,asset文件等
V:即View负责UI展示,提供页面视图,一般来说就是activity,fragment
P:即presenter负责逻辑处理,网络请求这类,与model层直接交互,通过接口回调的方式,所以view层不需要了解presenter层具体实现,不与view直接交互
我们可以在presenter层定义不同的函数,这些函数可以是网络请求,访问数据库,字符串校验等,一个公用的presenter,可以搬到不同的activity中使用,复用性强
相比较mvc,mvp彻底的解决了model和view的耦合性,presenter更灵活,很多相同的代码可以复用,但是缺点也比较明显,当一个activity网络请求很多,8个9个或10个,我们就需要维护相应多的接口回调,而当业务逻辑发生改变,删除或修改接口值给其他的控件赋值,此时不仅view层需要改变,presenter可能需要相应改变,另外presenter的实现方式,可能说一个很简单的逻辑处理,我们可能也要在写一个类,此处倒不如使用mvc进行实现。
M-V-VM
M:model负责数据的提供,可以是实体类,数据库,资源文件等
V:view负责页面视图展示,与viewModel双向绑定,不与model层交互
VM:viewModel 负责逻辑实现,网络请求,与model单向绑定,与view双向绑定
mvvm的精髓我认为就是viewModel了,负责从model层取出数据,取出值赋值给自己的变量,view层因为订阅了viewModel,当view观察到数据发生改变,自己的值也会更新。(很像Rxjava,jetpack的ViewModel也正是这么实现的)