iOS 设计模式 浅析MVC、MVP、MVVM

2,417 阅读3分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

一、MVC (Model、View、Controller)

苹果官方推荐的架构模式(MVC),最核心的就是通过Controller层来进行控制,首先看一下官方提供的MVC示意图,如下图所示:

IMG_4881.JPG

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示意图如下图所示: IMG_4882.JPG

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示意图如下图所示: MVVM.webp

2、总结

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

3、优缺点

3.1、优点

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

3.2、 缺点

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

项目源码参考:github.com/jhs521mmy/M…