MVC、MVP、MVVM区别

MVC、MVP、MVVM区别

  • MVC(Model-View-Controller) 。是一种设计模式,通常用于组织与应用程序的数据流。它通常包括三个组件:模型(Model)、视图(View)和控制器(Controller)1。

    • 模型(Model):负责应用程序中数据逻辑的部分,通常数据模型唯一负责在数据库中存取数据。
    • 视图(View):依据模型创建,负责其中数据的显示。
    • 控制器(Controller):应用程序中处理用户交互的部分,负责从视图读取数据,控制用户的输入,并向模型层发送数据。

    这一设计模式广泛应用于语言的框架中,不论是java的spring 还是python 的django,flask,go的gin框架。Django中又称之为MTV (model-template-view),但实际上就是MVC,没啥区别。

    在这里插入图片描述

MVP, 不是(Most Valuable Player)哈, 这里的 MVP 指 Model、View和 Presenter
在这里插入图片描述

并不是简单的把Controller 替换成了 Presenter, 而是将View 完全独立处理,仅负责视图相关操作,处理请求进来的数据已经返回处理好的数据, 避免在View 有过多的逻辑处理,而Presenter 则专心复杂和 Model 进行数据获取相关逻辑。

MVVM,它由三部分组成:Model、View和ViewModel

在这里插入图片描述

  1. Model:指数据模型和业务逻辑,是应用程序中处理数据和业务逻辑的部分。在WPF中,Model通常是一个类,这个类包含了数据的属性和行为。
  2. View:指用户界面,是应用程序中用户与计算机交互的部分。
  3. ViewModel:是连接Model和View的桥梁,它包含了与View相关的所有数据和业务逻辑,以及将数据绑定到View的方法。ViewModel为View提供了数据和业务逻辑的接口,使得View可以与Model进行交互。

在MVVM中,View和Model之间的联系是通过ViewModel进行处理的。ViewModel通过数据绑定将View中的控件与Model中的数据进行关联,当数据发生变化时,View中的控件也会相应地更新。同时,ViewModel也处理了用户在View中进行的交互操作,将用户的输入转化为业务逻辑进行处理,并将处理结果反馈给View,使得用户可以获得更好的交互体验。

相对于传统的MVC架构模式,MVVM更加强调View和Model之间的松散耦合,通过ViewModel进行数据绑定和业务逻辑处理,使得开发人员可以更加专注于业务逻辑和数据的开发,而设计人员可以更加专注于页面设计。MVVM框架便是前后端分离框架发展史上的一次思想的完全变革。它是将数据模型双向绑定的思想作为变革的核心,即View的变动,自动反映在ViewModel上面,而ViewModel的变动也会随即反映在View上面,从而实现数据与模型的双向绑定

MVP 和 MVVM 共同点在于,完全断开了View 和 Model 直接的联系,起到了很好的中间桥梁作用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/183765.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JWT原理分析——JWT

了解为什么会有JWT的出现? 首先不得不提到一个知识叫做跨域身份验证,JWT的出现就是为了更好的解决这个问题,但是在没有JWT的时候,我们一般怎么做呢?一般使用Cookie和Session,流程大体如下所示:…

基于ssm在线考试系统设计与实现(代码+文档+数据库)

ssm在线考试系统,java在线考试系统,在线考试系统 运行环境: JAVA版本:JDK1.8 IDE类型:IDEA、Eclipse都可运行 数据库类型:MySql(8.x版本都可) 硬件环境:Windows 角色&…

【GitLab CI/CD、SpringBoot、Docker】GitLab CI/CD 部署SpringBoot应用,部署方式Docker

介绍 本文件主要介绍如何将SpringBoot应用使用Docker方式部署,并用Gitlab CI/CD进行构建和部署。 环境准备 已安装Gitlab仓库已安装Gitlab Runner,并已注册到Gitlab和已实现基础的CI/CD使用创建Docker Hub仓库,教程中使用的是阿里云的Docker…

腾讯云16核服务器配置有哪些?CPU型号处理器主频性能

腾讯云16核服务器配置大全,CVM云服务器可选择标准型S6、标准型SA3、计算型C6或标准型S5等,目前标准型S5云服务器有优惠活动,性价比高,计算型C6云服务器16核性能更高,轻量16核32G28M带宽优惠价3468元15个月,…

后端接口接收对象和文件集合,formdata传递数组对象

0 问题 后端接口需要接收前端传递过来的对象和文件集合;对象中存在数组对象 1 前端和后端 前端只能使用formdata来传递参数,后端不使用RequestBody注解 2 formdata传递数组对象 2.1 多个参数对象数组 addForm: {contactInfo: [{contactPerson: ,…

Apifox日常使用(一键本地联调)

背景说明:现在的项目一般都是前后分离,线上出bug或者在进行联调时,有些时候后端需要重复模拟前端数据格式,在使用Apifox的情况下,如何快速造出后端需要的数据呢? 随便找一个网站,点开f12&#…

FastGPT | 3分钟构建属于自己的AI智能助手

这是一篇使用指南!!! FastGPT是什么? FastGPT 是一个基于 LLM 大语言模型的知识库问答系统,提供开箱即用的数据处理、模型调用等能力。同时可以通过 Flow 可视化进行工作流编排,从而实现复杂的问答场景&…

Solidity快速入门之函数输出

返回值return和returns Solidity有两个关键字与函数输出相关:return和returns,他们的区别在于: returns加在函数名后面,用于声明返回的变量类型及变量名;return用于函数主体中,返回想要返回的变量&#x…

Java入门篇 之 类与对象

本篇碎碎念:博主作为一个三本学生,庆幸自己上了个本科,但是在支付高昂学费的时候认识到,自己要好好学习,不好好学习,难道以后给人端盘子咩;无论是专科还是本科,都不可以自暴自弃&…

亚马逊云服务器成为了我的首选服务器

背景 作为一名计算机专业的大学生 当完成了自己的前后端项目或者是做出了属于自己的 网址,购买服务器是必不可少的亚马逊云服务器 相比于其他华为云 阿里云 以及腾讯云 等等 有着自己独特的优势 价格原因 学生党最在意的往往还是价格 一个良心亲民的价格 往往可以…

伐木猪小游戏

欢迎来到程序小院 伐木猪 玩法&#xff1a;控制小猪点击屏幕左右砍树&#xff0c;不能碰到树枝&#xff0c;考验手速与眼力&#xff0c;记录分数&#xff0c;快去挑战伐木吧^^。开始游戏https://www.ormcc.com/play/gameStart/199 html <script type"text/javascript…

《微服务架构设计模式》之三:微服务架构中的进程通信

概述 交互方式 客户端和服务端交互方式可以从两个维度来分&#xff1a; 维度1&#xff1a;一对一和多对多 一对一&#xff1a;每个客户端请求由一个实例来处理。 一对多&#xff1a;每个客户端请求由多个实例来处理。维度2&#xff1a;同步和异步 同步模式&#xff1a;客户端…

【Linux】JREE项目部署与发布

目录 一.jdk安装配置 1.1.传入资源 1.2. 解压 1.3. 配置 二.Tomcat安装 2.1.解压开启 2.2. 开放端口 三.MySQL安装 3.1.解压安装 3.2.登入配置 四.后端部署 今天就到这里了哦&#xff01;&#xff01;希望能帮到你哦&#xff01;&#xff01;&#xff01; 一.jdk…

VR全景在旅游中应用有哪些?VR云游的优势是什么?

近日受到剧烈日冕物质抛射活动影响&#xff0c;漠河再现极光美景&#xff0c;极光舞动的灿烂星空下&#xff0c;正在封冻的黑龙江上&#xff0c;无数的冰排随波而去&#xff0c;天地之间光影流动好不美丽。相信很多人都想了解、观赏祖国的大好风光&#xff0c;但是碍于没时间、…

【遍历二叉树算法描述】

文章目录 遍历二叉树算法描述先序遍历二叉树的操作定义中序遍历二叉树的操作定义后序遍历二叉树的操作定义 遍历二叉树算法描述 1.遍历定义&#xff1a;顺着某一条搜索路径寻访二叉树中的结点&#xff0c;使得每一个结点均被访问一次&#xff0c;而且仅访问一次&#xff08;又…

【Qt之绘制兔纸】

效果 代码 class drawRabbit: public QWidget { public:drawRabbit(QWidget *parent nullptr) : QWidget(parent) {}private:void paintEvent(QPaintEvent *event) {QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing, true);// 绘制兔子的耳朵painter.s…

C语言-指针讲解(2)

文章目录 1.野指针1.1 什么是野指针1.2 造成野指针的原因有哪些呢1.2.1造成野指针具体代码实例&#xff1a; 1.3 如何避免野指针呢?1.3.1如何对指针进行初始化&#xff1f;1.3.2如何才能小心指针越界?1.3.3 指针变量不再使用时&#xff0c;如何及时置NULL,在指针使用之前检查…

单链表的实现

单链表的实现 单链表的链表的概念及结构概念结构链表结构的分类链表常用的结构 无头单向不循环链表头文件 SList.h结构体 struct SListNode 源文件 SList.c创建结点 SLNode* SLBuyNode(SLDataType x)初始化链表 void SLInit(SLNode** pphead)链表尾部插入 void SLPushBack(SLNo…

C语言:计算 1! + 2! + 3! + ... + n!

题目&#xff1a; 从键盘输入一个值n&#xff0c;计算 1的阶乘 至 n的阶乘 的和&#xff0c; 如&#xff1a;输入10&#xff0c;计算 1的阶乘 至 n的阶乘 的和 --> 计算&#xff1a;1! 2! 3! ... 10! 思路一&#xff1a; 效率比较低&#xff0c;会重复计算之前计算过的…

Leetcode-234 回文链表

我的解法&#xff1a;使用栈&#xff0c;定义了len略微复杂&#xff0c;拿链表的后半部分和前半部分比较即可&#xff0c;没必要全部比较 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* List…