一、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来控制全局,同时将viewModel的变化分开,对于复杂混乱的项目结构,有了明确的组织方式。

3.2、缺点

随着业务逻辑增加,大量的逻辑代码放进了Controller,导致Controller越来越臃肿,后期维护成本高。

二、MVP (Model、View、Presenter)

1、概述

MVP模式是对MVC模式一个演进版本,其中ModelMVC模式中Model没有太大区别,ViewMCVC模式中View有一些差别,MVP中的View层可以是viewcontrollerview等控件;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中,ViewController联系在一起,我们把他们视为一个组件,viewcontroller和都不能直接引用model,而是引用的是视图模型viewmodel。在Viewmodel中处理用户输入验证逻辑、视图显示逻辑、网络请求逻辑等业务逻辑的地方。这样的设计模式,会轻微增加代码量,但是会减少代码的复杂性。

MVVM示意图如下图所示:

2、总结

MVVMMVP相对于MVC最大的改进在于:P或者VM创建了一个视图的抽象,将视图中的状态和行为抽离出来形成一个新的抽象。这可以把业务逻辑(P/VM)和业务展示(V)分离开单独测试,并且达到复用的目的,逻辑结构更加清晰。

3、优缺点

3.1、优点

view可以独立于Model变化和修改,一个viewmodel可以绑定不同的view上,降低耦合,增加重用。

3.2、 缺点

对于简单的项目不适用、大型的项目视图状态较多时构建和维护的成本大

项目源码参考:https://github.com/jhs521mmy/MVP

iOS 设计模式 浅析MVC、MVP、MVVM相关推荐

  1. iOS 架构模式 - 简述 MVC, MVP, MVVM

    Make everything as simple as possible, but not simpler - Albert Einstein,把每件事,做简单到极致,但又不过于简单 - 阿尔伯特· ...

  2. iOS 架构模式 - 简述 MVC, MVP, MVVM 和 VIPER (译)

    在使用 iOS 的 MVC 时候感觉怪怪的?想要尝试下 MVVM?之前听说过 VIPER,但是又纠结是不是值得去学? 继续阅读,你就会知道上面问题的答案 - 如果读完了还是不知道的话,欢迎留言评论. ...

  3. [iOS][转]iOS 架构模式 - 简述 MVC, MVP, MVVM 和 VIPER (译)

    转自: https://segmentfault.com/a/1190000004680605?ref=myread Make everything as simple as possible, bu ...

  4. Android架构设计之MVC/MVP/MVVM浅析

    目录 写在前面 一.案例演示 二.MVC模式 2.1.MVC简介 2.2.MVC模式的使用 2.3.MVC模式的缺点 三.MVP模式 3.1.MVP简介 3.2.MVP模式的作用 3.3.MVP模式的 ...

  5. Android App的设计架构:MVC,MVP,MVVM与架构经验谈

    本文转载自https://www.tianmaying.com/tutorial/AndroidMVC,原文作者周鸿博. 和MVC框架模式一样,Model模型处理数据代码不变在Android的App开 ...

  6. iOS-【转载】架构模式 - 简述 MVC, MVP, MVVM 和 VIPER

    看了很多篇关于 iOS 架构模式的,尤其是关于 MVVM 的,都是似懂非懂,无意看见了这篇,发现总结的很到位,很用心,特转载至此,如果英语好,请看原文 iOS Architecture Pattern ...

  7. iOS-【转载】架构模式 - 简述 MVC, MVP, MVVM 和 VIPER (译)

    看了很多篇关于 iOS 架构模式的,尤其是关于 MVVM 的,都是似懂非懂,无意看见了这篇,发现总结的很到位,很用心,特转载至此,如果英语好,请看原文 iOS Architecture Pattern ...

  8. MVC---Android App的设计架构:MVC,MVP,MVVM与架构经验谈

    转载自: http://www.tianmaying.com/tutorial/AndroidMVC 1.架构设计的目的 通过设计使程序模块化,做到模块内部的高聚合和模块之间的低耦合.这样做的好处是使 ...

  9. 表现层持续解耦带来的模式转变 MVC MVP MVVM

    ---微软WPF带来的团队变化和软件技术变化  Model-View-ViewModel是一种架构模式,主要在WPF.Silverlight和WP7开发里使用,它的目标是从视图层移除几乎所有代码隐藏( ...

最新文章

  1. SAP SD 信贷管理的操作流程
  2. 微信(支付宝)小程序蓝牙4.0线上项目
  3. 耳机不分主从是什么意思_开学必备高性价蓝牙耳机,学生党时尚配件推荐
  4. 写一个《扎金花》程序自己玩。
  5. I.MX6 Linux kernel LVDS backlight enable
  6. 竞彩足球混合过关赔率API调用示例代码
  7. python—将array格式图片保存至文件夹中
  8. 现金支票打印模板excel_市政工程表格不会填?市政工程1000个表格模板,一键即可套用...
  9. K-mer特征提取one-hot编码
  10. 用选择法或冒泡法对输入的50个字符(按照ASII码由小到大)进行排序
  11. 【OpenCV+Python实现医学影像拼接(一)】
  12. svg实现水滴相融效果
  13. CFG保护机制校验逻辑分析
  14. 这次的PMP考试(6月25日),有人欢喜有人忧,原因就在这...
  15. 使用74LS245驱动8×8LED点阵屏显示数字
  16. 《The One!团队》第八次作业:ALPHA冲刺(一)
  17. 储能系统集成解决方案
  18. Spiking GATs(基于尖峰神经网络的学习图注意)论文学习笔记
  19. 音频/语音处理-综述
  20. 0成本开发一个外卖领劵小程序,支持分销裂变(附源码及搭建教程)

热门文章

  1. tensorflow models zoo简介
  2. 别样肉客宣布进军全新品类 在华推出两款别样猪肉肉酱产品
  3. 咕咚软件显示服务器开小差,咕咚运动怎么用 咕咚运动使用方法
  4. 罗振宇 知识就是力量之如何成为一个受欢迎的人
  5. 《软件测试的艺术》万字笔记
  6. 关于python中的+、+=、*、*=
  7. Andriod-Dagger2
  8. PLC数据采集网关有哪些作用,PLC数据采集网关如何正确进行使用
  9. 尚硅谷以太坊区块链学习之NFT智能合约(6)
  10. Java语言的特性和优点