关于MVVM模式的简单入门

也是最近一段时间才知道MVVM模式,啃了一下午的英文文档终于有些了解这个模式,国内对这个模式的文档大都是翻译国外的,而且文档也比较少,对于新手来说入门也是比较困难的,那么今天我就把我所理解的一些关于MVVM的思考分享一下,帮助大家快速入门。

MVC模式想必大家都很熟悉了,到处都是用这个模式,我从编程入门就一直接触这个模式,压根就不知道MVVM模式。MVC模式分为Model,View,Controller三层,Model负责数据层,Controller负责业务逻辑层,View负责界面显示层,所以可以让不同的View使用用一个Controller层,程序扩展性比较好。所以我就不必多说这个模式了好处了。

那么我就就来谈谈MVC模式的坏处:不知道大家有没有感觉自己做iOS开发的时候一个tableViewController里面的代码好多好多,自己想找个方法就要找很久,以为找到了更新UI的方法,不料却是一个网络请求的方法,my god

开始吐槽:

你既然叫ViewController为什么网络请求的任务也要交给你?
你既然叫ViewController为什么数据解析的任务也要交给你?
你既然叫ViewController为什么数据存储的任务也要交给你?
你既然叫ViewController为什么你管那么多事?为什么不好好负责你的View啊????

吐槽完毕:

大家是不是看到了不好的地方,那么我们就要改MVC,怎么改呢?

你既然叫ViewController是吧,那么你就负责View的显示和更新,其他业务逻辑不需要你管,把你和View层绑在一起了,你们两个就负责一层就行了。
对于Model层,你还给我负责数据层就行了

那么业务逻辑层呢?

业务逻辑层我就在ViewController层和Model层之间再添加一个ViewModel层就行了,让他负责业务逻辑,负责网络请求和数据解析。

大家可以感受一下下面这个图:
这里写图片描述
这个图很好的诠释了MVC模式和MVVM模式的差别。

也就是说MVVM模式是MVC模式的升级版。

那么现在我们可以说ViewController从ViewModel层中读取数据然后显示在View上,他并不和Model层直接打交道,和Model层直接打交道的是ViewModel层。

下面我们就解释一下MVVM模式每层之间怎么通讯的

这里写图片描述

其实ViewController中会包含一个viewmodel的对象,View层需要变化,可以直接让这个对象调用ViewModel的方法获取数据,ViewModel层获得数据然后保存Model中,但是ViewModel层获取的数据怎么才能告诉ViewController层刷新UI呢?

这里写图片描述

方法1:使用block回调

可以在获取数据调用一个block回调,然后在ViewController中更新UI数据

//获取数据然后有一个block回调
-(void)topRefreshWithCallBack: (callback)callback;

方法2:使用reactiveCocoa库

github地址:reactiveCocoa
这个库包含了函数式编程和响应式编程。其实reactiveCocoa库就是MVVM模式的核心。
用法可以参考:
ReactiveCocoa入门教程——第一部分
ReactiveCocoa入门教程——第二部分

关于MVVM更好的介绍,请参考我实现的一个小demo
请使出九牛二虎之力来点击我

其他资料的参考
http://www.sprynthesis.com/2014/12/06/reactivecocoa-mvvm-introduction/
http://blog.scottlogic.com/2014/07/24/mvvm-reactivecocoa-swift.html

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值