iOS 设计模式 浅析MVC、MVP、MVVM
一、MVC (Model、View、Controller)
苹果官方推荐的架构模式(MVC
),最核心的就是通过Controller层来进行控制,首先看一下官方提供的MVC
示意图,如下图所示:
1、MVC各层职责
1.1、controller层
- 生成
view
,然后组装view
- 响应
View
的事件和作为view
的代理 - 处理
view
的生命周期 - 处理界面之间的跳转
- 调用
model
的数据获取接口,拿到返回数据,处理加工,渲染到view
显示
1.2、model层
- 业务逻辑封装
- 提供数据接口给
controller
使用 - 数据持久化存储和读取
- 作为数据模型存储数据
1.3、view层
- 界面元素搭建,动画效果,数据展示
- 接受用户操作并反馈视觉效果
2、总结
用户点击 View
–> 视图响应事件 -->通过代理传递事件到Controller
–>发起网络请求更新Model
—>Model
处理完数据–>代理或通知给Controller
–>改变视图样式–>完成
3、优缺点
3.1、优点
通过Controller
来控制全局,同时将view
和Model
的变化分开,对于复杂混乱的项目结构,有了明确的组织方式。
3.2、缺点
随着业务逻辑增加,大量的逻辑代码放进了Controller
,导致Controller
越来越臃肿,后期维护成本高。
二、MVP (Model、View、Presenter)
1、概述
MVP
模式是对MVC
模式一个演进版本,其中Model
与MVC
模式中Model
没有太大区别,View
和MCVC
模式中View
有一些差别,MVP
中的View
层可以是viewcontroller
、view
等控件;Presenter
层则是作为Model和View的中介,从Model层获取数据之后传给View
。
MVC
的缺点在于并没有区分业务逻辑和业务展示, 这对单元测试很不友好。 MVP
针对以上缺点做了优化, 它将业务逻辑和业务展示也做了一层隔离, 对应的就变成了MVCP
。
MVP示意图如下图所示:
2、总结
对比MVC
模式,M和V功能不变, 原来的C现在只负责布局, 而所有的业务逻辑全都转移到了P层。P层处理完了业务逻辑,如果要更改view的显示,那么可以通过回调来实现,这样可以减轻耦合,同时可以单独测试P层的业务逻辑。
3、优缺点
3.1、优点
- 模型和视图是完全分离的,可以做到修改视图而不影响模型
- 更加高效的使用模型,
View
不依赖Model
,可以说View
能做到对业务的完全分离
3.2、缺点
Presenter
中除了处理业务逻辑以外,还需要处理view-model
两层的协议,也会导致Presenter
的代码臃肿。
三、MVVM(Model、Controller/View、ViewModel)
1、概述
MVVM
是由微软提出来的,MVVM
其实是在MVP的基础上发展起来的。
在MVVM
中,View
和Controller
联系在一起,我们把他们视为一个组件,view
和controller
和都不能直接引用model
,而是引用的是视图模型viewmodel
。在Viewmodel
中处理用户输入验证逻辑、视图显示逻辑、网络请求逻辑等业务逻辑的地方。这样的设计模式,会轻微增加代码量,但是会减少代码的复杂性。
MVVM示意图如下图所示:
2、总结
MVVM
和MVP
相对于MVC最大的改进在于:P或者VM创建了一个视图的抽象,将视图中的状态和行为抽离出来形成一个新的抽象。这可以把业务逻辑(P/VM)和业务展示(V)分离开单独测试,并且达到复用的目的,逻辑结构更加清晰。
3、优缺点
3.1、优点
view
可以独立于Model
变化和修改,一个viewmodel
可以绑定不同的view
上,降低耦合,增加重用。
3.2、 缺点
对于简单的项目不适用、大型的项目视图状态较多时构建和维护的成本大
项目源码参考:https://github.com/jhs521mmy/MVP
iOS 设计模式 浅析MVC、MVP、MVVM相关推荐
- iOS 架构模式 - 简述 MVC, MVP, MVVM
Make everything as simple as possible, but not simpler - Albert Einstein,把每件事,做简单到极致,但又不过于简单 - 阿尔伯特· ...
- iOS 架构模式 - 简述 MVC, MVP, MVVM 和 VIPER (译)
在使用 iOS 的 MVC 时候感觉怪怪的?想要尝试下 MVVM?之前听说过 VIPER,但是又纠结是不是值得去学? 继续阅读,你就会知道上面问题的答案 - 如果读完了还是不知道的话,欢迎留言评论. ...
- [iOS][转]iOS 架构模式 - 简述 MVC, MVP, MVVM 和 VIPER (译)
转自: https://segmentfault.com/a/1190000004680605?ref=myread Make everything as simple as possible, bu ...
- Android架构设计之MVC/MVP/MVVM浅析
目录 写在前面 一.案例演示 二.MVC模式 2.1.MVC简介 2.2.MVC模式的使用 2.3.MVC模式的缺点 三.MVP模式 3.1.MVP简介 3.2.MVP模式的作用 3.3.MVP模式的 ...
- Android App的设计架构:MVC,MVP,MVVM与架构经验谈
本文转载自https://www.tianmaying.com/tutorial/AndroidMVC,原文作者周鸿博. 和MVC框架模式一样,Model模型处理数据代码不变在Android的App开 ...
- iOS-【转载】架构模式 - 简述 MVC, MVP, MVVM 和 VIPER
看了很多篇关于 iOS 架构模式的,尤其是关于 MVVM 的,都是似懂非懂,无意看见了这篇,发现总结的很到位,很用心,特转载至此,如果英语好,请看原文 iOS Architecture Pattern ...
- iOS-【转载】架构模式 - 简述 MVC, MVP, MVVM 和 VIPER (译)
看了很多篇关于 iOS 架构模式的,尤其是关于 MVVM 的,都是似懂非懂,无意看见了这篇,发现总结的很到位,很用心,特转载至此,如果英语好,请看原文 iOS Architecture Pattern ...
- MVC---Android App的设计架构:MVC,MVP,MVVM与架构经验谈
转载自: http://www.tianmaying.com/tutorial/AndroidMVC 1.架构设计的目的 通过设计使程序模块化,做到模块内部的高聚合和模块之间的低耦合.这样做的好处是使 ...
- 表现层持续解耦带来的模式转变 MVC MVP MVVM
---微软WPF带来的团队变化和软件技术变化 Model-View-ViewModel是一种架构模式,主要在WPF.Silverlight和WP7开发里使用,它的目标是从视图层移除几乎所有代码隐藏( ...
最新文章
- SAP SD 信贷管理的操作流程
- 微信(支付宝)小程序蓝牙4.0线上项目
- 耳机不分主从是什么意思_开学必备高性价蓝牙耳机,学生党时尚配件推荐
- 写一个《扎金花》程序自己玩。
- I.MX6 Linux kernel LVDS backlight enable
- 竞彩足球混合过关赔率API调用示例代码
- python—将array格式图片保存至文件夹中
- 现金支票打印模板excel_市政工程表格不会填?市政工程1000个表格模板,一键即可套用...
- K-mer特征提取one-hot编码
- 用选择法或冒泡法对输入的50个字符(按照ASII码由小到大)进行排序
- 【OpenCV+Python实现医学影像拼接(一)】
- svg实现水滴相融效果
- CFG保护机制校验逻辑分析
- 这次的PMP考试(6月25日),有人欢喜有人忧,原因就在这...
- 使用74LS245驱动8×8LED点阵屏显示数字
- 《The One!团队》第八次作业:ALPHA冲刺(一)
- 储能系统集成解决方案
- Spiking GATs(基于尖峰神经网络的学习图注意)论文学习笔记
- 音频/语音处理-综述
- 0成本开发一个外卖领劵小程序,支持分销裂变(附源码及搭建教程)