复杂的软件必须有清晰合理的架构,否则无法开发和维护。

MVC(Model-View-Controller)是最常见的软件架构之一,业界有着广泛的应用。它本身很容易理解,但是要讲清楚,它与衍生的MVP和MVVM架构的区别就不容易了,但是通过几张图片可以很容易对架构的基本原理进行理解。

1.     MVC

MVC模式的意思是,软件分为三个部分,Model,View,Controller

Model: 保存的数据

View: 视图,用户界面

Controller: 控制器,也就是业务逻辑

他们三者的具体关系如图:

View将用户指令发送给Controller, Controller 根据业务逻辑处理指令,然后将结果发送给Model去保存结果,Model保存完结果之后,将结果发送给View显示出来,所有的通信都是单向的。

2.     互动模式

接受用户指令的时候,MVC可以分成两种模式,一种是通过View接受指令,传给Controller,如图:

另外一种是通过Controller接受指令,如图:

3.     MVP模式

MVP就是分为Model,View,Presenter,就是讲Controller变为了Presenter,不过同时改变了通信方向,具体表现如图:

各部分通信都是双向的,View和Model不发生关系,View非常薄,数据被动视图,没有任何的主动性,只是用来显示数据,Presenter会很厚,包含所有的逻辑(业务逻辑和视图显示逻辑)。

4.    MVVM

MVVM就是将Presenter变成了ViewModel,唯一的区别就是MVVM采用双向绑定,View的变化会自动反映在ViewModel上,反之,ViewModel的改变也会在View上体现。

软件架构MVC, MVP, MVVM相关推荐

  1. Android架构设计之MVC/MVP/MVVM浅析

    目录 写在前面 一.案例演示 二.MVC模式 2.1.MVC简介 2.2.MVC模式的使用 2.3.MVC模式的缺点 三.MVP模式 3.1.MVP简介 3.2.MVP模式的作用 3.3.MVP模式的 ...

  2. 表现层持续解耦带来的模式转变 MVC MVP MVVM

    ---微软WPF带来的团队变化和软件技术变化  Model-View-ViewModel是一种架构模式,主要在WPF.Silverlight和WP7开发里使用,它的目标是从视图层移除几乎所有代码隐藏( ...

  3. java mvc mvp mvvm_一篇文章了解架构模式:MVC/MVP/MVVM

    架构模式的文章很多,好理解的没有几个.大部分文章出现的主要问题有: 没有设定好作用域:前端MVC是改造过的MVC,和后台MVC有明显的区别,不能一概而论 没有实际的例子:实际的例子对应日常的工作,没有 ...

  4. Android中常见的MVC/MVP/MVVM模式

    Android中常见的MVC/MVP/MVVM模式 经典MVC 在1979年,经典MVC模式被提出. 在当时,人们一直试图将纯粹描述思维中的对象与跟计算机环境打交道的代码隔离开来,而Trygve Re ...

  5. Android 系统(77)---MVC,MVP,MVVM的区别

    MVC,MVP,MVVM的区别 一.MVC 软件可以分为三部分 1.Model:模型层,负责处理数据的加载或者存储  2. View:视图层,负责界面数据的展示,与用户进行交互  3.Controll ...

  6. Android App的设计架构:MVC,MVP,MVVM与架构经验谈

    本文转载自https://www.tianmaying.com/tutorial/AndroidMVC,原文作者周鸿博. 和MVC框架模式一样,Model模型处理数据代码不变在Android的App开 ...

  7. iOS-【转载】架构模式 - 简述 MVC, MVP, MVVM 和 VIPER

    看了很多篇关于 iOS 架构模式的,尤其是关于 MVVM 的,都是似懂非懂,无意看见了这篇,发现总结的很到位,很用心,特转载至此,如果英语好,请看原文 iOS Architecture Pattern ...

  8. iOS-【转载】架构模式 - 简述 MVC, MVP, MVVM 和 VIPER (译)

    看了很多篇关于 iOS 架构模式的,尤其是关于 MVVM 的,都是似懂非懂,无意看见了这篇,发现总结的很到位,很用心,特转载至此,如果英语好,请看原文 iOS Architecture Pattern ...

  9. iOS 架构模式 - 简述 MVC, MVP, MVVM

    Make everything as simple as possible, but not simpler - Albert Einstein,把每件事,做简单到极致,但又不过于简单 - 阿尔伯特· ...

  10. iOS 架构模式 - 简述 MVC, MVP, MVVM 和 VIPER (译)

    在使用 iOS 的 MVC 时候感觉怪怪的?想要尝试下 MVVM?之前听说过 VIPER,但是又纠结是不是值得去学? 继续阅读,你就会知道上面问题的答案 - 如果读完了还是不知道的话,欢迎留言评论. ...

最新文章

  1. 谷歌搜索没有相机图标_谷歌Pixel 2/3a/4 XL中招!更新安卓11相机崩溃
  2. CF E2 - Daleks' Invasion (medium) (LCA求两点树上路径上的最大边权)
  3. MOS和三极管不同接法对应的性能比较
  4. 系列(五)—MySql
  5. 绝对路径用什么符号表示?当前目录、上层目录用什么表示?主目录用什么表示? 切换目录用什么命令?
  6. 统计字符串中单词个数
  7. javascript系列--javascript数组的常用算法解析
  8. python创建脚本文件_python创建文件备份的脚本
  9. 教程:用Java创建和验证JWT
  10. Lua利用cjson读写json
  11. (转载)equals与==
  12. 正确地实现以太币转账
  13. 批量注册windows下的动态库
  14. noip2009 普及组
  15. nas神经网络架构搜索_神经建筑搜索(NAS)基础
  16. Django 3.0实战: 仿链家二手房信息查询网(附GitHub源码)
  17. 经典卷积网络--ResNet残差网络
  18. windows计算机日志时间id6008,windows错误事件id6008修复方法
  19. 计算机无法找到输出设备,老司机搞定win10声音无法找到输入输出设置的解决方法...
  20. easyphp 登陆mysql_EasyPHP 16.1.1无法启动MySQL

热门文章

  1. 盘点骗了全球的32条谣言 月球上能看到长城?
  2. 超低噪声放大器DN-AP06
  3. 干货|通过代理方式安装devstack
  4. QT5.9.2 出现no valid kits found问题
  5. Python计算机视觉编程第四章——照相机模型与增强现实
  6. 说说著名的计算机科学家和他们的代表成就,说一说你知道的科学家和他们的成就...
  7. noMeiryoUI——Windows修改系统默认字体的一个好用工具
  8. JAVA计算机毕业设计写手管理平台Mybatis+源码+数据库+lw文档+系统+调试部署
  9. 3 of 100 days
  10. 云村,网易云音乐的扛把子?