iOS开发---MVC/MVP/MVVM浅析

2020-04-15  本文已影响0人  Cary_Xu

  关于设计模式,前面有文章大致简单介绍过了(iOS开发---单例浅析)。今天想跟大家分享一下个人对MVC、MVP以及MVVM的理解。如有不妥之处,诚邀各位看官不吝赐教、帮忙斧正。

  ⭐️何为MVC?

MVC结构.png

MVC模式(Model–View–Controller)
Model:一套便于管理、操作的数据模型。
View:屏幕上展示的,用户可以看到的UI。
Controller:居中沟通,协调MV

  ⭐️何为MVP?

MVP结构.png

MVP模式(Model–View–Presenter)
Model:一套便于管理、操作的数据模型。
View:屏幕上展示的,用户可以看到的UI。
Presenter:MVC中抽象出来的Presenter层。

关于C端和P端的循环引用问题, 直接用weak关键字就可以解决

⭐️Controller其实将view和viewController传递给了P层, 这样P层其实就拥有了控制器的权利, 完全可以行使控制器的职责.
⭐️Controller又持有Presenter, 那么它只需要调用P层暴露出的接口, 就完全可以完成整个业务逻辑和页面展示

  MVP将MVC的ViewController进行拆分:视图数据逻辑处理部分为P,ViewController剩余部分与View合并成V。V和P之间通过Protocol进行通信。
  MVP实现了各模块的解藕,具有更好的可测试性。但是总体代码量比MVC大。
  另外,MVC更适用于快速开发,即代码规模较小的项目。因此将简单的MVC的Demo改成MVP,反而会显得笨拙。

  ⭐️何为MVVM?

MVVM结构.png

MVVM模式(Model–View–View Model)
Model:一套便于管理、操作的数据模型。
View:屏幕上展示的,用户可以看到的UI。
View Model:实现与View的双向绑定。

  绑定是一种响应式的通信方式。当被绑定对象某个值的变化时,绑定对象会自动感知,无需被绑定对象主动通知绑定对象。可以使用KVO和RAC实现。例如在Label中显示倒计时,是V绑定了包含定时器的VM。
  双向绑定在MVVM中指的是V和VM之间相互绑定。例如TextField的text长度达到阈值,另一个Button改变背景颜色。这个过程中首先VM感知V中TextField的text属性长度变化,V感知VM中对应的状态属性。一旦V中TextField的text属性长度超出VM中的阈值,VM中的状态属性改变,触发V中Button的背景色发生改变。

  ⭐️总结:

越复杂的架构耦合度越小,但是开发速度越慢,反之亦然。所以要根据具体项目需求,在不同阶段决定架构。
如果模式之间存在兼容性,可选择混合开发。

参考资料:
iOS架构入门 - MVC模式实例演示
iOS 开发之 MVP

上一篇下一篇

猜你喜欢

热点阅读