[架构之路-195]-《软考-系统分析师》- MVC、MVP、MVVM架构各自的优缺点

news2024/11/24 22:52:59

目录

一、MVC

1.1 MVC的基本结构

1.2 MVC的工作流程

1.3 MVC的优缺点

二、MVP

2.1 MVP的基本结构

2.2 MVP的工作流程

2.3 MVP的优缺点

三、MVVM

3.1 MVVM的基本结构

3.2 MVVM的工作流程

3.3 MVVM的优缺点


前言:

MVC:一个controller对应多个view,model可以直接通过view。

MVP:一个Presenter对应一个view,model不能通过view

MVVM:一个ViewModel可以对应多个View,model不能通过view。

一、MVC

1.1 MVC的基本结构

MVC(Model-View-Controller)是桌面开发中常见的软件架构。

标准的MVC架构图如下:

MVC架构图:

Model(模型):外部数据库接口

负责业务数据管理和处理,包括增删改查。

Model必须提供外部可以操作模型数据的接口,同时在数据发生变化后能够通知外部。

View(视图):外部操作界面接口

用户界面。View需要感知Model的变化,数据变化时,更新用户界面

Controller(控制器):内部业务逻辑

业务逻辑层。Controller需要感知View的事件,调用Model提供的接口对数据进行操作

1.2 MVC的工作流程

1、用户对界面进行操作,触发View的相关事件;

2、View感知这些事件,通知Controller进行处理;

3、Controller处理相关业务,并通过Model的接口对业务数据进行更新;

4、Model的业务数据改变触发相应事件,可以直接通知View业务数据已经发生改变;

5、View捕获到Model发出的数据改变事件,重新获取数据并更新用户界面。

1.3 MVC的优缺点

优点:复用性提升

  • 降低用户界面业务逻辑之间的耦合性。大大降低了用户界面和业务逻辑的耦合性,可以隔离模块间的变化,有利于维护和扩展。
  • 复用性高多个视图可以共享一个数据模型。
  • MVC可以将一个项目分为三个子项目(进程或线程)分别进行开发和管理,有利于软件工程化,也可实现独立部署
  • 因为业务逻辑和界面的分离,为业务模块的单元测试创造了条件。

缺点:资源消耗更多

  • 不适合中小规模的软件项目。MVC引入了更多概念,增加了项目结构和实现的复杂性,将其应用到中小规模项目通常得不偿失。
  • 更多的内存消耗。Model中的内容都可以从界面获取到,因此,Model的引入增加了内存消耗
  • 降低了程序性能。因为实现的复杂性,势必会导致性能降低

二、MVP

2.1 MVP的基本结构

MVP(Model-View-Presenter)是从MVC演变而来的。在MVC的基础上,MVP强调Model与View之间的隔离,两者互不感知。MVP的架构图如下:

MVP架构图

在MVP架构中,P占据主导地位,充当Model和View的桥梁,实现两者之间的隔离。

2.2 MVP的工作流程

  1. 用户对界面进行操作,触发View的相关事件;
  2. View感知这些事件,通知Presenter进行处理;
  3. Presenter处理相关业务,并通过Model的接口对业务数据进行更新;
  4. Model数据变化会通知Presenter;
  5. Presenter收到Model数据变化通知后,调用View暴露的接口更新用户界面。

2.3 MVP的优缺点

优点:

  • 视图和模型完全分离MVC常常会因为V和M的耦合性太强而渐渐导致C失去控制作用
  • 所有交互都在P中实现,M的设计可以更加灵活,有利于M的高效使用。

缺点:

  • P可能会很臃肿,难以维护。

三、MVVM

3.1 MVVM的基本结构

MVVM(Model-View-ViewModel)也是MVC的演变而来。由微软公司提出并在WPF上大量应用。

MVVM强调数据绑定,从而省去了模型数据改变后通知数据更新的步骤。

MVVM的架构图如下:

MVVM架构图

Model:业务数据处理接口

View:用户界面。用户界面代码编写时,直接将M中的业务数据以声明方式绑定到对应的视图组件上。

ViewModel:核心功能有2个:

  • 1)界面渲染完成后,将声明绑定到View上的业务数据和View进行双向绑定,同步更新;
  • 2)相应View的事件,操纵M实现业务处理。

 

3.2 MVVM的工作流程

  1. 界面渲染完毕后,ViewModel会将View和Model按照开发时声明的方式进行双向绑定;
  2. 用户对界面进行操作,触发View的相关事件;
  3. ViewModel感知View发出的事件,调用Model的接口处理业务逻辑;
  4. Model内容改变,用户界面立即更新,无需额外操作。

3.3 MVVM的优缺点

优点:

  • 开发效率高,产品开发生命周期短。通过数据双向绑定,不需要手动更新界面,实现了关注点分离,降低了开发的复杂性和工作量;
  • 双向绑定可以通过感知模型数据的变化提前感知界面即将发生的变化,优化该过程,可以提高界面的渲染速度,避免重复渲染。

缺点:

  • 数据绑定会消耗额外资源,占用更多的内存
  • 数据绑定会导致模型数据的变化变得难以追踪

也有一些MVVM框架采用单向数据绑定+UI事件劫持的方式,这里简单介绍下双绑和单绑的区别:

  • 一般只有UI表单控件才存在双向数据绑定,非UI表单控件只有单向数据绑定。
  • 单向数据绑定:M的变化可以自动更新到ViewModel,但ViewModel的变化需要手动更新到M(一般通过给表单控件设置事件监听实现)
  • 双向数据绑定:M的变化可以自动更新到ViewModel,ViewModel的变化也可以自动更新到M
  • 双向绑定=单向绑定+UI事件监听,双向和单向只不过是框架封装程度上的差异,本质上两者是可以相互转换的。

优缺点:

  • 单向数据绑定的优点是数据更易于跟踪管理和维护,缺点是代码量较多比较啰嗦。
  • 双向数据绑定的优点是代码量少、简洁,缺点是数据不易于跟踪管理和维护。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows SSH远程连接Linux服务器 - 无公网IP内网穿透

文章目录 前言视频教程1、安装OpenSSH2、vscode配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程 转…

学系统集成项目管理工程师(中项)系列02_文件和标准

1. 文件 1.1. 2020 年 4 月,中共中央国务院颁发《关于构建更加完善的要素市场化配置体制的意见》首次将数据作为一种新型的生产要素置入文件 1.1.1. 【21下选01】 1.2. 2021 年印发的 5G 应用扬帆行动计划(2021-2023)的通知到 2023 年,我国 5G 应用发…

数列合并C语言

已知两个不同长度的降序排列的数列(假设序列的长度都不超过5),请编程将其合并为一个数列,使合并后的数列仍保持降序排列。 【提示】假设两个降序排列的数列分别保存在数组a和数组b中,用一个循环,从前往后依…

利用 Amazon API Gateway 和 Amazon Lambda 处理 Cloudfront 的内容请求

概述 国内 Amazon Cloudfront 目前不支持 Lambdaedge 功能,不能实现基于 CDN 的 A/B 测试、rewrite、redirect、token 认证和产生 response 等功能,本文介绍如何利用 API Gateway 和 Lambda 实现 Lambdaedge 的功能。下面实验介绍通过 request header 参…

HttpClient5如何进行代理

文章目录 说明原始HttpClient代理HttpClient总结 说明 在这篇文章中会对HttpClient5如何进行代理进行说明,我的HttpClient版本是5.2.1。在进行代理之前请先准备好代理服务器。 原始HttpClient 下面是没有进行代理设置的代码,尝试去访问openai接口 Tes…

GPT-1面试题

简介 1、GPT-1 是什么?它是基于什么模型的? GPT-1 是一种用于自然语言处理的机器学习模型,它是基于 Transformer 架构的。它是 OpenAI 在 2018 年发布的第一个 GPT 模型,有 1.17 亿个参数,比之前的语言模型有了显著的…

PowerShell

2023年5月12日,周五晚上: 今天突然对看到了一篇关于Linux的Shell的文章,引起了我的兴趣,但由于我的电脑没有虚拟机,所以我决定研究研究一下windows的PowerShell,感觉还挺好玩的。 打开了一个新世界。 不…

【最新可用】chatGPT镜像网站国内使用,免费稳定!

新建了一个网站 https://ai.weoknow.com/ 每天给大家更新可用的国内可用chatGPT 2023.5.8新增一个 ChatGPT 国内免翻版 【网站名称】:Chat GPT Ai 【使用环境】:移动端/电脑网页端 ChatGPT是一款功能强大的免费在线聊天机器人,具有人工智能…

Bean的生命周期及演示

文章目录 一、介绍概念组成: 二、实例演示 一、介绍 概念 Bean的生命周期是指一个Bean对象从创建到销毁的整个存在过程。 组成: 1.实例化Bean(为Bean分配内存空间) 2.属性注入 (Bean注入和装配) 3.Bean的初始化 各种通知&#…

【Midjourney】Midjourney 辅助工具 ② ( 自定义命令工具 | 设置颜色 | 设置材质 | 设置随机种子 | 设置图片链接 )

文章目录 一、Midjourney Prompt Tool 自定义命令工具1、设置颜色参数2、设置材质参数3、设置随机种子参数4、设置图片链接 Midjourney 提示词命令 可以使用 辅助工具 进行生成 , 辅助工具如下 : Midjourney Prompt Tool 自定义命令工具Midjourney Prompt Generator 命令生成器…

C语言实现【三子棋小游戏】

Hello,各位小伙伴们好啊,这篇博客是用C语言实现了三子棋的游戏,感兴趣的友友可以试试玩哦~ 咦,当我们以玩家的身份和电脑玩这个游戏的时候,有哪些步骤呢?那么,反过来,我们设计游戏的…

C++智能指针的原理、分类、使用

1. 智能指针介绍 为解决裸指针可能导致的内存泄漏问题。如: a)忘记释放内存; b)程序提前退出导致资源释放代码未执行到。 就出现了智能指针,能够做到资源的自动释放。 2. 智能指针的原理和简单实现 2.1 智能指针的原…

『python爬虫』19. aiohttp模块应用之下载图片(保姆级图文)

目录 1. aiohttp库安装2. 代码解析3. 实现代码总结 欢迎关注 『python爬虫』 专栏,持续更新中 欢迎关注 『python爬虫』 专栏,持续更新中 通过爬取下载得到图片 1. aiohttp库安装 pip install aiohttp这个库的作用基本上和request一致,理解…

SpringBoot——RUST风格以及如何快速发送不同方式的请求

RUST风格: 简单来说,RUST就是一种将请求方式融合到路径中的一种请求路径书写风格,注意这里是风格,不是规定,我们也可以不使用他或者不是非常严格的按照他规定的样式来写,但是由于行业中大多数的人在编程的…

Firefox 112 发布:右键单击显示密码、改进标签管理等!

Firefox 发布 112 版本,为我们带来了显示密码的新选择、同时改进了标签管理等。 Mozilla 于 2023 年 4 月 11 日发布了 Firefox 112,新版本包含一些令人兴奋的新功能和改进。该浏览器的最新版本带来了一些功能以增强用户体验和提高性能。 在 Ubuntu 上运…

UNIAPP实战项目笔记69 订单确认时显示为默认地址

UNIAPP实战项目笔记69 订单确认时显示为默认地址 思路 需要用到vuex 默认显示isDefault为1的地址 案例截图 订单结算页面 地址页面 代码 shopcart.vue <template><view class"shop-cart"><template v-if" list.length > 0 "><!-…

【Linux学习笔记】设备驱动模型详解——总线、设备、驱动和类

学习内容 设备驱动模型视频讲解 简介 设备驱动是计算机系统中的重要组成部分&#xff0c;它们允许操作系统与硬件交互。设备驱动模型是一种通用的抽象框架&#xff0c;用于描述操作系统如何管理硬件设备。这里我们将介绍设备驱动模型中的四个关键概念&#xff1a;总线、设备…

GitLab+Drone CI持续集成自动部署web项目

一、环境介绍 1.gitlab服务器 172.16.11.1 搭建参考&#xff1a;Gitlab教程 2.Drone服务器 172.16.11.2 搭建参考: 基于gitlab搭建Drone CI 3.web服务器 172.16.11.3 已配置好nginx相关web服务&#xff0c;这里nginx配置的web目录为/www/test 还有生成ssh key密钥即可&am…

编程的未来

从 ChatGPT 诞生至今&#xff0c;在程序员的圈子里&#xff0c;我们一直有两种讨论&#xff1a; 最开始所恐慌的&#xff1a;编程没有未来&#xff0c;ChatGPT 是不是要取代程序员。编程的方式前所未有地发生了变化。 现如今&#xff0c;GitHub Copilot Chat 可以让开发者们直…

算法修炼之练气篇——练气十八层

博主&#xff1a;命运之光 专栏&#xff1a;算法修炼之练气篇 前言&#xff1a;每天练习五道题&#xff0c;炼气篇大概会练习200道题左右&#xff0c;题目有C语言网上的题&#xff0c;也有洛谷上面的题&#xff0c;题目简单适合新手入门。&#xff08;代码都是命运之光自己写的…