美文网首页
MVC、MVP、MVVM概念梳理

MVC、MVP、MVVM概念梳理

作者: link的勇气 | 来源:发表于2019-08-13 11:33 被阅读0次

    一、框架模式

    MVC、MVP、MVVM是框架模式,而非设计模式。
    在软件开发领域有3种级别的重用:
    内部重用,即在同一应用中能公共使用的抽象块;
    代码重用,即将通用模块组合成库或工具集,以便在多个应用和领域都能使用;
    应用框架重用,为专业领域提供通用的或现成的基础结构,以获得最高级别的重用性。
    框架模式是大智慧,用来对软件设计进行分工;
    设计模式是小技巧,对具体问题提出解决方案,以提高代码复用率,降低耦合度。

    二、MVC

    MVC模式.png
    Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。
      通常模型对象负责在数据库中存取数据。
    View(视图)是应用程序中处理数据显示的部分。
      通常视图是依据模型数据创建的。
    Controller(控制器)是应用程序中处理用户交互的部分。
      通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

    三、MVP

    MVP是MVC的一种演化版本,MVP模式可以让分离显示层和逻辑层,它们之间通过接口进行通信,降低耦合。
    我们的应用至少可以分为3层,这样我们可以对这3个层次进行独立的单元测试。
    理想化的MVP模式可以实现同一份逻辑代码搭配不同的显示界面,因为它们之间并不依赖于具体,而是依赖于抽象。

    MVP模式.png
    Presenter 交互中间人
      Presenter主要作为沟通View和Model的桥梁,它从Model层检索数据后,返回给View层,使得View和Model之间没有耦合,也将业务逻辑从View角色上抽离出来。
    View 用户界面
      View通常是指Activity、Fragment或者某个View控件,它含有一个Presenter成员变量。通常View需要实现一个逻辑接口,将View上的操作通过接口转交给Presenter实现,最后,Presenter调用View逻辑接口将操作Model的结果返回给View元素。
    Model 数据的存取
      对于一个结构化的App来说,Model角色主要是提供数据的存取功能。Presenter需要通过Model层存储、获取数据,Model就像一个数据仓库。通常来说Model是封装了数据库DAO或者网络获取数据的角色,或两种数据获取方式的集合。

    四、MVVM

    MVVM模式.png
    Model:MVVM的Model层与MVC、MVP没有太大区别,也主要是封装数据存储或操作的一些逻辑,与两者不同的是Model会提供一系列的实体类用作与UI进行绑定,ViewModel则会在修改这些数据后将数据变化告诉View层并使UI刷新。
    View:View层与MVC、MVP一样,都是用于处理界面的逻辑且不参与业务逻辑相关的操作,只负责显示由ViewModel提供的数据。
    ViewModel:本质是视图模型与视图状态的合称,其主要职责就是为View层提供一个可供其显示的数据模型并同时搜集、处理这些数据。

    五、MVC、MVP与MVVM的异同

    MVC MVP MVVM
    Model 典型MVC中的Model与View存在耦合,一般情况下Model会以事件监听的方式将数据的改变告诉VIew层 MVP下的Model与View没有任何直接的耦合,其更像一个数据仓库对外提供相应数据 MVVM中的Model与MVP类似,只负责数据的封装,不同的是还会配合Binder绑定数据变化的监听
    View 典型MVC中的View层比较简单,主要就是界面相关的逻辑,为了方便查询数据和监听数据变化,View还会与Model有一定的耦合 MVP下的View与MVC不同的是,View不再与Model有直接联系,同时在一些情况下View还会依赖于接口进一步解耦 MVVM中的View层除了处理UI相关的逻辑外还会配合Binder绑定UI变化的监听
    Controller Presenter ViewModel
    典型MVC中Controller主要处理用户交互逻辑,其接收View层的交互事件并根据事件的不同调用不同的Model层逻辑进行相关的数据操作或者直接进行View层的切换,对Controller而言,并不关心View层如何被展示,Controller只会修改对应的Model层,View层的刷新则由Model层通过观察者模式通知 Presenter的作用类似于MVC中的Controller,但是其会反作用于View层,Model层的数据更新会被首先反馈到Presenter,由Presenter优先处理并决定是否刷新以及刷新哪个View,也就是说说Presenter完全将View层与Model层隔离开,充当一个名副其实的中间人角色 相对于Controller和Presenter,ViewModel的职责更少,它将原本Controller和Presenter与View和Model交互的业务逻辑抽取交由Binder负责,大部分情况下Binder都会有对应框架层面的实现,比如android中的Databinding,对开发者而言自己实现ViewModel的部分加相对变少了

    参考资料:
    Android源码设计模式解析与实战

    相关文章

      网友评论

          本文标题:MVC、MVP、MVVM概念梳理

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