美文网首页
iOS开发---MVC/MVP/MVVM浅析

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

作者: Cary_Xu | 来源:发表于2020-04-15 09:36 被阅读0次

      关于设计模式,前面有文章大致简单介绍过了(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

    相关文章

      网友评论

          本文标题:iOS开发---MVC/MVP/MVVM浅析

          本文链接:https://www.haomeiwen.com/subject/xjizmhtx.html