美文网首页iOS学习开发架构师之路将来跳槽用
MVC、MVP、MVVM你知道该怎么选吗?

MVC、MVP、MVVM你知道该怎么选吗?

作者: 程序员_秃头怪 | 来源:发表于2019-01-18 21:28 被阅读6次

    随着iOS职位的火热,越来越多的人都想成为一名优秀的iOS开发工程师,那么在竞争激烈的时代,应该如何成为一名iOS开发工程师呢?今天小编就带你们了解一下iOS架构的模式——MVC、MVP、MVVM.

    一、MVC架构模式

    1、MVC的实现思路是:用户操作View,在Controller层完成业务逻辑处理,更新Model层,将数据显示在View层。

    在MVC中,每个层之间都有关联,耦合比较紧,在大型项目中,维护起来比较费力。
    View把控制权交给Controller层,自己不执行业务逻辑;Controller层执行业务逻辑并且操作Model层,但不会直接操作View层;View和Model层的同步消息是通过观察者模式进行,而同步操作是由View层自己请求Model层的数据,然后对视图进行更新,观察者模式可以做到多视图同时更新。

    2.设计 MVC 的重要目的:

    就是在人的心智模型与计算机的模型之间建立一个桥梁,早期的 MVC作为架构模式中最出名并且应用最广泛的架构模式,MVC 并没有一个明确的定义,网上流传的 MVC 架构图也是形态各异,小编找了很多资料也没有办法确定到底什么样的架构图才是标准的 MVC 实现。


    数据关系

    • View 接受用户交互请求
    • View 将请求转交给Controller
    • Controller 操作Model进行数据更新
    • 数据更新之后,Model通知View更新数据变化
    • View 更新变化数据
      而所有的方式都是单向通信的。
    3、MVC的使用方式

    MVC中的View是可以直接访问Model的!从而,View里会包含Model信息,不可避免的还要包括一些业务逻辑。在MVC模型里,更关注的Model的不变,而同时有多个对Model的不同显示,及View。所以,在MVC模型里,Model不依赖于View,但是 View是依赖于Model的。不仅如此,因为有一些业务逻辑在View里实现了,导致要更改View也是比较困难的,至少那些业务逻辑是无法重用的。

    MVC使用非常广泛,比如JavaEE中的SSH框架(Struts/Spring/Hibernate),Struts(View, STL)-Spring(Controller, Ioc、Spring MVC)-Hibernate(Model, ORM)以及ASP.NET中的ASP.NET MVC框架,xxx.cshtml-xxxcontroller-xxxmodel。(实际上后端开发过程中是v-c-m-c-v,v和m并没有关系,下图仅代表经典的mvc模型)

    二、MVP架构模式

    1、MVP的实现思路是:用户操作View,在Presenter层完成业务逻辑处理,更新Model层,通过Presenter将数据显示在View层,完全隔断Model和View之间的通信。

    我们通过接口的方式来连接view和presenter层,这样导致的问题是,如果页面过于复杂,我们的接口就会很多,为了更好的处理类似的问题,需要定义一些基类接口,把一些公共的逻辑,比如网络请求,toast,提示框等放在里面。
    因为MVP不依赖Model,所以可以更好的进行组件化,把它从特定的场景中脱离出来,做到高度复用。MVP中的Presenter更多的作为框架的控制者,承担了大量的逻辑操作。

    2、MVP和MVC的区别

    在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会直接从Model中读取数据而不是通过 Controller。

    在MVC里,View是可以直接访问Model的!从而,View里会包含Model信息,不可避免的还要包括一些业务逻辑。 在MVC模型里,更关注的Model的不变,而同时有多个对Model的不同显示,即View。所以,在MVC模型里,Model不依赖于View,但是View是依赖于Model的。不仅如此,因为有一些业务逻辑在View里实现了,导致要更改View也是比较困难的,至少那些业务逻辑是无法重用的。


    数据关系

    • View 接收用户交互请求
    • View 将请求转交给 Presenter
    • Presenter 操作Model进行数据更新
    • Model 通知Presenter数据发生变化
    • Presenter 更新View数据
      而MVP各部分之间都是双向通信的

    3、MVP的使用方式

    MVP的实现会根据View的实现而有一些不同,一部分倾向于在View中放置简单的逻辑,在Presenter放置复杂的逻辑;另一部分倾向于在presenter中放置全部的逻辑。这两种分别被称为:Passive View和Superivising Controller。

    .NET程序员熟知的ASP.NET webform、winform基于事件驱动的开发技术就是使用的MVP模式。

    三、MVVM架构模式

    1、MVVM和MVP的最大区别是采用了双向绑定机制,View的变动,自动反映在ViewModel上。


    数据关系

    • View 接收用户交互请求
    • View 将请求转交给ViewModel
    • ViewModel 操作Model数据更新
    • Model 更新完数据,通知ViewModel数据发生变化
    • ViewModel 更新View数据

    2、MVVM优点

    MVVM模式和MVC模式一样,主要目的是分离视图(View)和模型(Model),有几大优点:

    1. 低耦合。View可以独立于Model变化和修改,一个ViewModel可以绑定到不同的”View”上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。
    2. 可重用性。你可以把一些视图逻辑放在一个ViewModel里面,让很多view重用这段视图逻辑。
    3. 独立开发。开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计,生成xml代码。
    4. 可测试。界面素来是比较难于测试的,而现在测试可以针对ViewModel来写。
    小编推荐一个iOS交流群:923910776 群内提供底层原理进阶、逆向攻防、架构设计、算法结构、面试题整合文档等免费资料!给大家提供一个交流学习的平台!

    相关文章

      网友评论

        本文标题:MVC、MVP、MVVM你知道该怎么选吗?

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