从MVP到MVVM

本文介绍了MVVM模式,对比了它与MVP的区别。MVVM关注数据与视图的绑定,通过数据变化驱动视图更新,常利用KVO或RAC简化实现。文章探讨了MVVM中的Model、View和ViewModel的职责,并通过伪代码展示了MVVM的实现方式,强调了数据源与视图的绑定和解耦。
摘要由CSDN通过智能技术生成

前言

通过上篇文章,我们了解到利用mvp可以对mvc的c层瘦身,并使得层次分明,且网络请求变得通用。那就已经很完美了,那么mvvm是用来干嘛的呢。

对于mvvm它是用来描述数据和视图的关系的。我们开发过程中常常发现数据变化会导致视图的变化,如一个列表,当没有数据的时候要展示空界面,当有数据的时候要展示对应条数的列表界面。在比如当网络请求回来的列表中的一个为已点赞数据,那么界面的相应视图就要显示红心其他都为灰心。

以上示例都反应了数据和视图的这种绑定关系,并且数据一变化视图就要相应的进行变化,也就是所谓的数据驱动。

以上介绍在说明数据驱动视图这件事,这和mvc,mvp是不同的,导致了编码思想也不同。

数据一变化视图就要变化,也就是要监听数据的变化,这可以利用kvo。但是苹果中的kvo用起来很麻烦,首先要注册kvo,并在界面销毁时候要释放kvo。而RAC的出现解决了这个麻烦,从而使得mvvm的写法变得更方便了。也就是说mvvm要用到kvo思想来监听数据源的变化,从而让视图变化。rac代替了kvo的这种繁琐写法。mvvm用的是kvo思想,rac不是必须的,但是用了更方便而已。关于rac的用发可以参考这里

MVVM

M:Model,它是模型类,就是有很多属性,每个属性名字和后台返回的字段名相同。

V:View,它是视图类,如继承与UIView类的所有类都可以认为是V层,并且Controller也属于V层,即继承与UIView,UIViewController类的所有类都属于V层。这个类里存放的都是和视图相关的逻辑代码。并且controller类里存放的是一些胶水代码(就是起到粘合作用的代码)。和p层有区别,加入了视图和数据源的绑定机制。

VM:viewModel,它是vm层,这里是主要写网络请求,数据逻辑的地方。处理和视图无关的数据逻辑等。这个类不该持有v层,也就是不该#import <UIKit/UIKit.h>。并且该类和p层是有区别的,它不是通过回调的方式返回到v层。而是通过kvo的方式。

三者关系是,v层持有vm层,vm层持有m层,并通过kvo的方式通知v层。

通过以上分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值