mvc 、mvp、 mvvm
一、 MVC模式
MVC是Model-View-Controller的缩写,它将应用程序划分为三个部分,分别是Model、View、Controller,模型、视图和控制器,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑
三个部分的理解:
Model:程序需要操作的数据和信息,用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法
View:提供给用户的操作界面,是程序的外壳,渲染页面
Controller:接收View层传递过来的指令,选取Model层对应的数据,进行相应的操作,用于控制应用程序的流程,及页面的业务逻辑
MVC之间的通信之间是单向的,View层会从Model层拿取数据,View和Model层存在耦合
MVC的特点:
实现关注点分离,即应用程序中的数据模型与业务和展示逻辑解耦
View传送指令到Controller
Controller接收指令完成业务逻辑后,要求Model改变状态
Model 将新的数据发送到View,用户得到反馈
MVC的流程:
第一种:通过 View 接受指令,传递给 Controller,然后对模型进行修改或者查找底层数据,最后把改动渲染在视图上
第二种:通过controller接受指令,传给Controller
MVC的优点:
耦合性低
复用性高
生命周期成本低
MVC使开发和维护用户接口的技术含量降低
可维护性高
部署快
MVC的缺点:
不适合小型、中等规模的应用程序
视图和控制器间过于紧密连接
视图对模型数据的低效率访问
二、 MVP模式
MVP是单词Model View Presenter的首字母的缩写,分别表示数据层、视图层、发布层,它是MVC架构的一种演变
MVP 模式将 Controller 改名为 Presenter,同时改变了通信方向,各部分之间的通信,都是双向的,View 与 Model 不发生联系,都通过 Presenter 传递,V—>P—>M,M—>P—>V
在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会直接从Model中读取数据而不是通过 Controller
View层被称之为被动视图,不部署任何业务逻辑,而所有的业务逻辑都部署在Presenter 发布层
MVP的特点:
M、V、P之间双向通信
View 与 Model 不通信,都通过 Presenter 传递,Presenter完全把Model和View进行了分离,主要的程序逻辑在Presenter里实现
View 非常薄,不部署任何业务逻辑,称为”被动视图”(Passive View),即没有任何主动性,而 Presenter非常厚,所有逻辑都部署在那里
Presenter与具体的View是没有直接关联的,而是通过定义好的接口进行交互,从而使得在变更View时候可以保持Presenter的不变,这样就可以重用。不仅如此,还可以编写测试用的View,模拟用户的各种操作,从而实现对Presenter的测试,从而不需要使用自动化的测试工具
MVP的优点:
模型与视图完全分离,我们可以修改视图而不影响模型
可以更高效地使用模型,因为所有的交互都发生在一个地方——Presenter内部
我们可以将一个Presenter用于多个视图,而不需要改变Presenter的逻辑,这个特性非常的有用,因为视图的变化总是比模型的变化频繁
把逻辑放在Presenter中,进行单元测试,脱离用户接口来测试这些逻辑
MVP的缺点:
视图和Presenter的交互会过于频繁,联系过于紧密,耦合度过高,view变更,presenter也要变更
MVC和MVP之间的区别:
在MVC中,View与Model层直接交互,读取数据,不通过Controller
在MVP中,View与Model层不直接交互,而是通过Presenter与Controller进行交互,所有的交互都是发生在Presenter 的内部
三、 MVVM模式
MVVM是Model、View、ViewModel的简写,MVVM模式其实是MV模式与WPF结合的应用方式时发展演变过来的一种新型架构模式,它立足于原有MVP框架并且把WPF的新特性糅合进去,以应对客户日益复杂的需求变化
MVVM相比较于MVP,将Presenter变成ViewModel,ViewModel可以理解成是View的数据模型和Presenter的合体
ViewModel和View之间的交互通过Data Binding完成,而Data Binding可以实现双向的交互,这就使得视图和控制层之间的耦合程度进一步降低,关注点分离更为彻底,同时减轻了Activity的压力
MVVM中的数据可以实现双向绑定,即View层数据变化则ViewModel中的数据也随之变化,反之ViewModel中的数据变化,则View层数据也随之变化
MVVM模式和MVC模式类似,主要目的是分离视图(View)和模型(Model)
MVVM的优点:
低耦合,视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的”View”上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变
可重用性,可以把一些视图逻辑放在一个ViewModel里面,让很多view重用这段视图逻辑
独立开发,开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计,使用Expression Blend可以很容易设计界面并生成xml代码
可测试,界面向来是比较难于测试的,而现在测试可以针对ViewModel来写
mvc 、mvp、 mvvm相关推荐
- MVC、MVP和MVVM的优缺点
目前流行的架构模式是MVC.MVP和MVVM 1.MVC Model(模型).View(视图).Controller(控制器) 优点: 1)耦合性低,视图层和业务层分离 2)可维护性高,简单,方便修改 ...
- MVC、MVP、MVVM
MVC.MVP.MVVM这些模式是为了解决开发过程中的实际问题而提出来的,目前作为主流的几种架构模式而被广泛使用. 一.MVC(Model-View-Controller) MVC是比较直观的架构模式 ...
- iOS进阶之架构设计MVC、MVP、MVVM(12)
转载自:iOS架构模式MVC.MVP.MVVM(内附demo) 文章对比了MVC.MVP.MVVM,结构清晰,示例简单,容易让人接受.所以转载至此.以供自己赏读. MVC MVC的实现思路是:用户操作 ...
- android mvc mvp 区别,谈谈Android框架 MVC、MVP、MVVM的区别
今天写写Android的MVC.MVP.MVVP三个框架的对比,并加深自己对这三个框架的理解. 548b9bea8dc18.gif 一 . MVC:Model-View-Controller MVC全 ...
- MVC、MVP、MVVM,我到底该怎么选?
前言 MVC.MVP.MVVM是我们工作和面试中都比较重要的一块,但很多时候我们却有点迷惑.比如看了好多篇文章都搞不懂MVC到底是个啥本来想写个MVP写着写着就变成MVC了,到底Databing和MV ...
- 对MVC、MVP、MVVM的理解
最近看了一堆js框架的文档,有点乱,想分门别类整理一下,但是首先需要搞清楚这些框架里面经常谈论的MV*之类的概念.MVC的概念很早就知道,现在发现还有MVP.MVVM,那么这些设计模式有什么区别呢?谈 ...
- Android App的架构设计:从VM、MVC、MVP到MVVM
随着Android应用开发规模的扩大,客户端业务逻辑也越来越复杂,已然不是简单的数据展示了.如同后端开发遇到瓶颈时采用的组件拆分思想,客户端也需要进行架构设计,拆分视图和数据,解除模块之间的耦合,提高 ...
- 从Script到Code Blocks、Code Behind到MVC、MVP、MVVM
刚过去的周五(3-14)例行地主持了技术会议,主题正好是<UI层的设计模式--从Script.Code Behind到MVC.MVP.MVVM>,是前一天晚上才定的,中午花了半小时准备了下 ...
- [vue] 说说你对MVC、MVP、MVVM模式的理解
[vue] 说说你对MVC.MVP.MVVM模式的理解 MVVM用视图模型代替了MVP中的展示器,视图模型和视图实现了双向绑定,当视图发生变化的时候视图模型也会发生改变,当视图模型变化的时候视图也随之 ...
- 结合vue、react、angular谈谈MVC、MVP、MVVM框架
首先,在谈这个话题之前, 我们有必要了解一下库和框架的区别. 我们先来看react官网以及vue官网对他们的定位: react: vue: react我们不说了,官网上明明白白说了,人家是一个libr ...
最新文章
- python二叉搜索树建立_700. 二叉搜索树的搜索(Python)
- 怎么去掉 IDEA 中 XML 显示的屎黄色
- UIView加任意边框(Masonry)
- NVelocity模板引擎的注意事项
- dispatchTouchEvent onInterceptTouchEvent onTouchEvent区分
- chrome瀏覽器去掉緩存的方法
- eclipse MyEclipse中安装 spket插件 js文件内容字体变小解决方案
- 年发5篇Science,现入选中国榜“35岁以下科技创新35人”!
- 关于ios在H5页面长按识别二维码无效
- c语言作业ce是什么错误代码,[求助]C语言实现ce搜索功能的两道题
- JavaWeb项目启动时,tomcat会启动两次的原因(之一)和解决方案
- 在.NET 3.5中使用Parallel.For()(转帖)
- [JAVA网络编程]用Socket与网络调试助手(NetAssist)进行TCP通讯过程中遇到的问题
- (转)交替方向乘子法(ADMM)的原理和流程的白话总结
- 版本号(SNAPSHOT GA....)都是啥意思
- HNU小学期实训课设
- 使用ESP8266-01S 作为Station PC作为Server通讯出现 ERROR CLOSED问题的解决办法
- 为什么正常单据记账没有数据_正常单据记账怎么没有记录U8存货核算?正常 – 手机爱问...
- 【优秀课设】基于Python的百度API的OCR名片识别【含完整API账户】
- Python3识别判断图片主要颜色并和颜色库进行对比的方法
热门文章
- STM32F103学习笔记(十一)——USMART调试组件的使用
- 批处理、分时、实时各个操作系统特点
- Fatal error: Uncaught Error: Call to undefined function mysqli_content() in D:\phpstudy_pro\WWW\user
- Linux下缓冲区溢出攻击的原理及对策
- 配置域名 二级,三级的泛解析
- 公共钥匙盒 Java算法
- uniapp获取微信小程序openid
- 5.14——教你把ssh抄成ssm
- 深度!用“极速统一”,开启金融行业数据分析新范式
- 使用arduino开发esp8266和esp32时首选项设置方法(附国内开发板管理网址)