美文网首页ios技能包
iOS开发中的MVC,MVP和MVVM

iOS开发中的MVC,MVP和MVVM

作者: s2mh | 来源:发表于2017-12-27 20:20 被阅读826次

    MVC

    传统的MVC,Cocoa MVC,以及大多数iOS开发使用的MVC,这三者并不相同。

    MVC历史悠久,在不同平台有各自的实现方式。其目的是实现并行开发和代码复用

    传统 MVC的一种版本

    苹果也设计自己的MVC,其特点是:M和V相互隔离,通过C连接。

    Cocoa MVC

    但实际的使用并非如此。通常ViewController同时扮演了C和部分V的角色,显得非常庞大。其中包含了各种逻辑,也不利于测试。

    iOS开发使用的MVC(MassiveViewController)

    M和V经常会直接通信,产生了耦合。例如Cell类经常提供这样的方法计算高度:

    + (CGFloat)cellHeightWithModel:(SomeModel *)model;
    

    MVP

    MVP中的V在iOS中指的是ViewController和View。MVP将MVC的ViewController进行拆分:视图数据逻辑处理部分为P,ViewController剩余部分与View合并成V。V和P之间通过Protocol进行通信。

    视图数据逻辑:与视图相关的数据处理。例如将NSDate转换成NSString

    MVP

    MVP实现了各模块的解藕,具有更好的可测试性。但是总体代码量比MVC大。
    另外,iOS MVC更适用于快速开发,即代码规模较小的项目。因此将简单的MVC的Demo改成MVP,反而会显得笨拙。

    MVVM

    在MVP的基础上,将P改成与V双向绑定的VM就变成了MVVM。

    mvvm

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

    选择

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

    参考

    Introduction to MVVM
    iOS Architecture Patterns

    相关文章

      网友评论

        本文标题:iOS开发中的MVC,MVP和MVVM

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