一、 MVC模式

  1. MVC是Model-View-Controller的缩写,它将应用程序划分为三个部分,分别是Model、View、Controller,模型、视图和控制器,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑

  1. 三个部分的理解:

Model:程序需要操作的数据和信息,用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法

View:提供给用户的操作界面,是程序的外壳,渲染页面

Controller:接收View层传递过来的指令,选取Model层对应的数据,进行相应的操作,用于控制应用程序的流程,及页面的业务逻辑

  1. MVC之间的通信之间是单向的,View层会从Model层拿取数据,View和Model层存在耦合

  1. MVC的特点:

  • 实现关注点分离,即应用程序中的数据模型与业务和展示逻辑解耦

  • View传送指令到Controller

  • Controller接收指令完成业务逻辑后,要求Model改变状态

  • Model 将新的数据发送到View,用户得到反馈

  1. MVC的流程:

  • 第一种:通过 View 接受指令,传递给 Controller,然后对模型进行修改或者查找底层数据,最后把改动渲染在视图上

  • 第二种:通过controller接受指令,传给Controller

  1. MVC的优点:

  • 耦合性低

  • 复用性高

  • 生命周期成本低

  • MVC使开发和维护用户接口的技术含量降低

  • 可维护性高

  • 部署快

  1. MVC的缺点:

  • 不适合小型、中等规模的应用程序

  • 视图和控制器间过于紧密连接

  • 视图对模型数据的低效率访问

二、 MVP模式

  1. MVP是单词Model View Presenter的首字母的缩写,分别表示数据层、视图层、发布层,它是MVC架构的一种演变

  1. MVP 模式将 Controller 改名为 Presenter,同时改变了通信方向,各部分之间的通信,都是双向的,View 与 Model 不发生联系,都通过 Presenter 传递,V—>P—>M,M—>P—>V

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

  1. View层被称之为被动视图,不部署任何业务逻辑,而所有的业务逻辑都部署在Presenter 发布层

  1. MVP的特点:

  • M、V、P之间双向通信

  • View 与 Model 不通信,都通过 Presenter 传递,Presenter完全把Model和View进行了分离,主要的程序逻辑在Presenter里实现

  • View 非常薄,不部署任何业务逻辑,称为”被动视图”(Passive View),即没有任何主动性,而 Presenter非常厚,所有逻辑都部署在那里

  • Presenter与具体的View是没有直接关联的,而是通过定义好的接口进行交互,从而使得在变更View时候可以保持Presenter的不变,这样就可以重用。不仅如此,还可以编写测试用的View,模拟用户的各种操作,从而实现对Presenter的测试,从而不需要使用自动化的测试工具

  1. MVP的优点:

  • 模型与视图完全分离,我们可以修改视图而不影响模型

  • 可以更高效地使用模型,因为所有的交互都发生在一个地方——Presenter内部

  • 我们可以将一个Presenter用于多个视图,而不需要改变Presenter的逻辑,这个特性非常的有用,因为视图的变化总是比模型的变化频繁

  • 把逻辑放在Presenter中,进行单元测试,脱离用户接口来测试这些逻辑

  1. MVP的缺点:

视图和Presenter的交互会过于频繁,联系过于紧密,耦合度过高,view变更,presenter也要变更

  1. MVC和MVP之间的区别:

  • 在MVC中,View与Model层直接交互,读取数据,不通过Controller

  • 在MVP中,View与Model层不直接交互,而是通过Presenter与Controller进行交互,所有的交互都是发生在Presenter 的内部

三、 MVVM模式

  1. MVVM是Model、View、ViewModel的简写,MVVM模式其实是MV模式与WPF结合的应用方式时发展演变过来的一种新型架构模式,它立足于原有MVP框架并且把WPF的新特性糅合进去,以应对客户日益复杂的需求变化

  1. MVVM相比较于MVP,将Presenter变成ViewModel,ViewModel可以理解成是View的数据模型和Presenter的合体

  1. ViewModel和View之间的交互通过Data Binding完成,而Data Binding可以实现双向的交互,这就使得视图和控制层之间的耦合程度进一步降低,关注点分离更为彻底,同时减轻了Activity的压力

  1. MVVM中的数据可以实现双向绑定,即View层数据变化则ViewModel中的数据也随之变化,反之ViewModel中的数据变化,则View层数据也随之变化

  1. MVVM模式和MVC模式类似,主要目的是分离视图(View)和模型(Model)

  1. MVVM的优点:

  • 低耦合,视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的”View”上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变

  • 可重用性,可以把一些视图逻辑放在一个ViewModel里面,让很多view重用这段视图逻辑

  • 独立开发,开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计,使用Expression Blend可以很容易设计界面并生成xml代码

  • 可测试,界面向来是比较难于测试的,而现在测试可以针对ViewModel来写

mvc 、mvp、 mvvm相关推荐

  1. MVC、MVP和MVVM的优缺点

    目前流行的架构模式是MVC.MVP和MVVM 1.MVC Model(模型).View(视图).Controller(控制器) 优点: 1)耦合性低,视图层和业务层分离 2)可维护性高,简单,方便修改 ...

  2. MVC、MVP、MVVM

    MVC.MVP.MVVM这些模式是为了解决开发过程中的实际问题而提出来的,目前作为主流的几种架构模式而被广泛使用. 一.MVC(Model-View-Controller) MVC是比较直观的架构模式 ...

  3. iOS进阶之架构设计MVC、MVP、MVVM(12)

    转载自:iOS架构模式MVC.MVP.MVVM(内附demo) 文章对比了MVC.MVP.MVVM,结构清晰,示例简单,容易让人接受.所以转载至此.以供自己赏读. MVC MVC的实现思路是:用户操作 ...

  4. android mvc mvp 区别,谈谈Android框架 MVC、MVP、MVVM的区别

    今天写写Android的MVC.MVP.MVVP三个框架的对比,并加深自己对这三个框架的理解. 548b9bea8dc18.gif 一 . MVC:Model-View-Controller MVC全 ...

  5. MVC、MVP、MVVM,我到底该怎么选?

    前言 MVC.MVP.MVVM是我们工作和面试中都比较重要的一块,但很多时候我们却有点迷惑.比如看了好多篇文章都搞不懂MVC到底是个啥本来想写个MVP写着写着就变成MVC了,到底Databing和MV ...

  6. 对MVC、MVP、MVVM的理解

    最近看了一堆js框架的文档,有点乱,想分门别类整理一下,但是首先需要搞清楚这些框架里面经常谈论的MV*之类的概念.MVC的概念很早就知道,现在发现还有MVP.MVVM,那么这些设计模式有什么区别呢?谈 ...

  7. Android App的架构设计:从VM、MVC、MVP到MVVM

    随着Android应用开发规模的扩大,客户端业务逻辑也越来越复杂,已然不是简单的数据展示了.如同后端开发遇到瓶颈时采用的组件拆分思想,客户端也需要进行架构设计,拆分视图和数据,解除模块之间的耦合,提高 ...

  8. 从Script到Code Blocks、Code Behind到MVC、MVP、MVVM

    刚过去的周五(3-14)例行地主持了技术会议,主题正好是<UI层的设计模式--从Script.Code Behind到MVC.MVP.MVVM>,是前一天晚上才定的,中午花了半小时准备了下 ...

  9. [vue] 说说你对MVC、MVP、MVVM模式的理解

    [vue] 说说你对MVC.MVP.MVVM模式的理解 MVVM用视图模型代替了MVP中的展示器,视图模型和视图实现了双向绑定,当视图发生变化的时候视图模型也会发生改变,当视图模型变化的时候视图也随之 ...

  10. 结合vue、react、angular谈谈MVC、MVP、MVVM框架

    首先,在谈这个话题之前, 我们有必要了解一下库和框架的区别. 我们先来看react官网以及vue官网对他们的定位: react: vue: react我们不说了,官网上明明白白说了,人家是一个libr ...

最新文章

  1. python二叉搜索树建立_700. 二叉搜索树的搜索(Python)
  2. 怎么去掉 IDEA 中 XML 显示的屎黄色
  3. UIView加任意边框(Masonry)
  4. NVelocity模板引擎的注意事项
  5. dispatchTouchEvent onInterceptTouchEvent onTouchEvent区分
  6. chrome瀏覽器去掉緩存的方法
  7. eclipse MyEclipse中安装 spket插件 js文件内容字体变小解决方案
  8. 年发5篇Science,现入选中国榜“35岁以下科技创新35人”!
  9. 关于ios在H5页面长按识别二维码无效
  10. c语言作业ce是什么错误代码,[求助]C语言实现ce搜索功能的两道题
  11. JavaWeb项目启动时,tomcat会启动两次的原因(之一)和解决方案
  12. 在.NET 3.5中使用Parallel.For()(转帖)
  13. [JAVA网络编程]用Socket与网络调试助手(NetAssist)进行TCP通讯过程中遇到的问题
  14. (转)交替方向乘子法(ADMM)的原理和流程的白话总结
  15. 版本号(SNAPSHOT GA....)都是啥意思
  16. HNU小学期实训课设
  17. 使用ESP8266-01S 作为Station PC作为Server通讯出现 ERROR CLOSED问题的解决办法
  18. 为什么正常单据记账没有数据_正常单据记账怎么没有记录U8存货核算?正常 – 手机爱问...
  19. 【优秀课设】基于Python的百度API的OCR名片识别【含完整API账户】
  20. Python3识别判断图片主要颜色并和颜色库进行对比的方法

热门文章

  1. STM32F103学习笔记(十一)——USMART调试组件的使用
  2. 批处理、分时、实时各个操作系统特点
  3. Fatal error: Uncaught Error: Call to undefined function mysqli_content() in D:\phpstudy_pro\WWW\user
  4. Linux下缓冲区溢出攻击的原理及对策
  5. 配置域名 二级,三级的泛解析
  6. 公共钥匙盒 Java算法
  7. uniapp获取微信小程序openid
  8. 5.14——教你把ssh抄成ssm
  9. 深度!用“极速统一”,开启金融行业数据分析新范式
  10. 使用arduino开发esp8266和esp32时首选项设置方法(附国内开发板管理网址)