MVC、MVP、MVVM三种区别

MVC

1、MVC概念

MVC 模式是软件工程中的一种常见的软件架构模式,它把软件系统分为了三个基本部分,分别为代表-- 模型(Model)–视图(View)–控制器(Controller)。

举个栗子:当我们写好一篇博客点击预览按钮的时候,就触动 Model 拉取信息并促使 View 显示页面的过程就称为Controller,这时候页面的呈现就是 View,此时负责从服务器获取预览信息的类就叫做 Model。

具体看一下各个部分的功能

  • Model(模型) - Model对应应用状态和业务功能的封装,能够将它理解为同时包含数据和行为的领域模型。Model接收Controller的请求并完成相应的业务处理,在应用状态改变的时候能够向 View 发出相应的请求。
  • View(视图) - View实现可视化界面的呈现并捕捉最终用户的交互操作。View能够直接调用Model查询其状态信息,而Model也能够在本身的状态发生改变时,主动通知View。
  • Controller(控制器) - Controller是M和V之间的连接器,用于控制应用程序的流程,及页面的业务逻辑

2、MVC优点:

  • 耦合性低,视图层和业务层分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码。
  • 重用性高,MVC模式允许使用各种不同样式的视图来访问同一个服务器端的代码,因为多个视图能共享一个模型,MVC使开发和维护用户接口的技术含量降低
  • 可维护性高,分离视图层和业务逻辑层也使得WEB应用更易于维护和修改
  • 部署快,使用MVC模式使开发时间得到相当大的缩减
  • 有利软件工程化管理

3、MVC缺点:

  • 不适合小型,中等规模的应用程序,花费大量时间将MVC应用到规模并不是很大的应用程序通常会得不偿失。
  • 视图与控制器间过于紧密连接,视图与控制器是相互分离,但却是联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。
  • 视图对模型数据的低效率访问,依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。

mvp

1、MVP概念

MVP(Model-View-Presenter)是MVC的改良模式,由IBM的子公司Taligent提出。和MVC的相同之处在于:Controller/Presenter负责业务逻辑,Model管理数据,View负责显示只不过是将 Controller 改名为 Presenter,同时改变了通信方向。

2、MVP与MVC区别

在这里插入图片描述
通过对比图我们分析一下两种模式的特点:
MVC

  1. View:布局的xml文件,或者纯Java写的布局,可以把页面显示的逻辑直接放在View中。
  2. Model:数据处理层,可以直接和View进行交互。
  3. Controller:把特定的功能逻辑抽离出来,作为控制层,保证View层和Model层的功能单一性,便于维护。

MVC模式相对比较简单,尤其是View层,我们可以通过js等技术直接操作页面,完成和Controlller层和Model层的交互,所以MVC的核心是在View层。

MVP

  1. View:Activity作为显示层。
  2. Presenter:逻辑层,从Activity中抽离出功能逻辑,简化Activity的代码。
  3. Model:数据处理层,主要负责网络请求,本地数据加载等操作,进一步简化Activity的代码。

从MVP的构成来看,Presenter和Model都是为了View层存在的,所以MVP的核心仍然是View层

MVC和MVP的区别

  1. Presenter与Controller都扮演了逻辑层的角色,但是Presenter层的功能相对更复杂,因为他负责和View的双向交互,Controller只是单向的中介。因为Presenter是从View层抽离出来的,通常和View是一对一的关系,而Controller是面向业务的,往往是单例模式或者提供静态方法。
  2. MVP中View和Model是不能进行通信的,虽然加重了P层的负担,但是有利于维护View层和Model层,如果条件允许,我们还可以对Presenter进一步拆分,来弥补Presenter负担过重的问题。
  3. MVC中View和Model层可以直接交互,虽然方便了两者之间的交互,但是耦合性相对较高。

3、MVP优点

  1. 把业务逻辑全部分离到Controller中,模块化程度高。当业务逻辑变更的时候,不需要变更View和Model,只需要Controller换成另外一个Controller就行了(SwappableController)。
  2. 观察者模式可以做到多视图同时更新。

4、MVP缺点

  1. Controller测试困难。因为视图同步操作是由View自己执行,而View只能在有UI的环境下运行。在没有UI环境下对Controller进行单元测试的时候,Controller业务逻辑的正确性是无法验证的:Controller更新Model的时候,无法对View的更新操作进行断言。
  2. View无法组件化。View是强依赖特定的Model的,如果需要把这View抽出来作为一个另外一个应用程序可复用的组件就困难了。

MVVM

1、MVVM概念

MVVM是Model-View-ViewModel的简写。微软的WPF(Windows Presentation Foundation–微软推出的基于Windows 的用户界面框架)带来了新的技术体验, 使得软件UI层更加细节化、可定制化。与此同时,在技术层面,WPF也带来了 诸如Binding(绑定)、Dependency Property(依赖属性)、Routed Events(路由事件)、Command(命令)、DataTemplate(数据模板)、ControlTemplate(控制模板)等新特性。MVVM模式其实是MV模式与WPF结合的应用方式时发展演变过来的一种新型架构模式。它立足于原有MVP框架并且把WPF的新特性糅合进去,以应对客户日益复杂的需求变化

在这里插入图片描述

  1. View:就像在MVC和MVP模式中一样,视图是用户在屏幕上看到的结构、布局和外观(UI)
  2. Model:模型是指代表真实状态内容的领域模型(面向对象),或指代表内容的数据访问层(以数据为中心)。
  3. ViewModel:视图模型是暴露公共属性和命令的视图的抽象。MVVM没有MVC模式的控制器,也没有MVP模式的presenter,有的是一个绑定器。在视图模型中,绑定器在视图和数据绑定器之间进行通信。
  4. 绑定器:声明性数据和命令绑定隐含在MVVM模式中。在Microsoft解决方案堆中,绑定器是一种名为XAML的标记语言。绑定器使开发人员免于被迫编写样板式逻辑来同步视图模型和视图。在微软的堆之外实现时,声明性数据绑定技术的出现是实现该模式的一个关键因素。

2、MVVM优点

MVVM模式和MVC模式一样,主要目的是分离视图(View)和模型(Model)

  1. 低耦合。视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的"View"上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。
  2. 可重用性。可以把一些视图逻辑放在一个ViewModel里面,让很多view重用这段视图逻辑。
  3. 独立开发。开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计,使用Expression Blend可以很容易设计界面并生成xaml代码。
  4. 可测试。界面素来是比较难于测试的,测试可以针对ViewModel来写。
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值