web前端面試-- MVC、MVP、MVVM 架構模式對比

MVC、MVP、MVVM 架構模式對比

基本概念

這三種都是用于分離用戶界面(UI)與業務邏輯的架構模式,旨在提高代碼的可維護性、可測試性和可擴展性。

1. MVC (Model-View-Controller)

核心結構

  • Model:數據模型和業務邏輯
  • View:用戶界面展示
  • Controller:接收用戶輸入并協調Model和View

數據流向

用戶操作 → View → Controller → Model → (通知) → View更新

特點

  • View可以直接訪問Model
  • Controller相對"厚重",包含大量業務邏輯
  • 常用于Web開發(如Spring MVC、Ruby on Rails)

2. MVP (Model-View-Presenter)

核心結構

  • Model:數據模型和業務邏輯
  • View:用戶界面(被動視圖)
  • Presenter:中間人,處理View邏輯

數據流向

用戶操作 → View → Presenter → Model → Presenter → View

特點

  • View不能直接訪問Model
  • Presenter持有View引用
  • View是被動的,只負責顯示
  • 更易于單元測試(如Android早期開發常用)

3. MVVM (Model-View-ViewModel)

核心結構

  • Model:數據模型
  • View:用戶界面
  • ViewModel:View的抽象(包含狀態和命令)

數據流向

用戶操作 → View → ViewModel → Model → (數據綁定) → View自動更新

特點

  • 通過數據綁定實現自動更新
  • ViewModel不知道View的存在
  • 最適合數據驅動型應用(如WPF、Vue、Angular)

對比表格

特性MVCMVPMVVM
View職責主動被動聲明式
更新機制Controller手動更新Presenter手動更新數據綁定自動更新
耦合度View知道ModelView不知道ModelView不知道Model
測試難度較難(Controller厚重)較易最易(ViewModel獨立)
典型應用傳統Web應用Windows Forms應用現代前端框架
通信方向雙向View→Presenter單向雙向(通過綁定)

演進關系

MVC → MVP → MVVM

隨著應用復雜度增加,架構模式不斷演進,分離越來越徹底,測試越來越容易。

如何選擇

  • 簡單項目:MVC足夠
  • 需要高測試性:MVP或MVVM
  • 數據驅動UI:優先MVVM
  • 平臺支持:根據框架選擇(如Android可用MVP/MVVM,Vue/Angular用MVVM)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/89959.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/89959.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/89959.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【C#】MVVM知識點匯總-2

在C#中實現MVVM(Model-View-ViewModel)架構時,可以總結以下幾個關鍵知識點,并通過具體的代碼示例來進行說明。 1. 模型 (Model) 模型包含應用程序中的數據和業務邏輯。通常與數據庫交互。 public class User { public int Id {…

一文了解PMI、CSPM、軟考、、IPMA、PeopleCert和華為項目管理認證

1 引言 常見的項目管理方面的認證有PMI、IPMA、PeopleCert、CSPM、軟考和華為項目管理認證6個認證。本篇文章讓你一文了解各認證的基本主要內容。 2 核心定位 目前全球范圍內最具影響力的六大認證體系各有特色,源于不同的管理哲學和實踐背景。六大認證體系的核心…

bean注入的過程中,Property of ‘java.util.ArrayList‘ type cannot be injected by ‘List‘

一、問題 在spring實踐bean注入ArrayList屬性的時候報錯:Property of ‘java.util.ArrayList’ type cannot be injected by ‘List’二、原因分析 在嘗試將 Spring 配置中的 注入到一個 ArrayList 類型的屬性時出現了類型不匹配問題。核心問題在于:Spr…

自注意力機制原理: 向量矩陣案例進行說明

自注意力機制原理: 向量矩陣案例進行說明 目錄 自注意力機制原理: 向量矩陣案例進行說明一個單詞和所有單詞進行乘法運算,提取特征一、場景設定:翻譯句子“我喜歡深度學習”二、向量矩陣構建:以“我”為例計算自注意力三、矩陣視角:批量計算整個序列的自注意力四、向量矩…

D3 面試題100道之(61-80)

這里是D3的面試題,我們從第 61~80題 開始逐條解答。一共100道,陸續發布中。 ?? 面試題(第 61~80 題) 61. D3 中如何繪制餅圖? 使用 d3.pie() 生成角度數據,再結合 d3.arc() 創建路徑。 示例: const data = [10, 20, 30

flutter更改第三方庫pub get的緩存目錄;更改.gradle文件夾存放目錄

1.在目標目錄中新建文件夾flutter_pub_cache 2.在“用戶變量“或“系統變量”中點擊“新建” 變量名: PUB_CACHE 變量值: D:\flutter_pub_cache 3.打開新的終端運行或者從Android studio 控制臺運行:flutter pub cache repair或者flutter pub clean pub讀取新的變…

《Redis》哨兵模式

文章目錄 為什么要有哨兵模式呢?哨兵自動恢復故障主節點使用docker搭建分布式系統查看哨兵節點工作哨兵選舉新的主節點的流程 總結 為什么要有哨兵模式呢? 主從復制的問題 Redis 的主從復制模式可以將主節點的數據改變同步給從節點,這樣從節…

零基礎保姆級本地化部署文心大模型4.5開源系列

近兩年隨著大模型的迅猛崛起,吸引了各行各業的廣泛關注,更對我們的工作方式與生活產生著顯著積極影響。在這樣一個技術范式轉換的關鍵節點,百度文心大模型開源事件無疑具有里程碑意義——它不僅為中國自主研發的AI技術底座打開了通向世界的大…

【筆記】PyCharm 2025.2 EAP 創建 Poetry 和 Hatch 環境的踩坑實錄與反饋

https://youtrack.jetbrains.com/issue/PY-82407/Incorrect-Python-Version-and-Virtual-Environment-Path-When-Creating-Poetry-and-Hatch-Environments-via-GUI-in-PyCharm-2025.2-EAP 在 Python 開發的道路上,PyCharm 一直是我們信賴的開發利器。然而&#xff0…

ASP.NET Web Pages 安裝使用教程

一、ASP.NET Web Pages 簡介 ASP.NET Web Pages 是微軟推出的一種輕量級 Web 開發框架,適合快速開發動態網站。它使用 Razor 語法,可以將 HTML 與 C# 或 VB.NET 無縫融合,特別適合初學者和小型項目。 二、Web Pages 與 MVC 的區別 特性Web …

基于 ethers.js 的區塊鏈事件處理與錢包管理

幣圈工具箱 bqbot.cn 月訪問量達90whttps://bqbot.cn/jms.html (在線版地址) Event事件 檢索事件 const { ethers } require("hardhat"); async function SearchEvent() {try {const provider new ethers.JsonRpcProvider("http://1…

SpringBoot系列—入門

目錄 1 第一個SpringBoot程序 1.1 創建SpringBoot項目 1.2 選擇SpringBoot版本和必要依賴 1.3 項目目錄結構 1.4 編寫Hello World代碼 1.5 運行程序 1.6 不需要IDEA也能創建SpringBoot程序 1.7 部署程序 1.8 pom.xml依賴問題 1.9 無Maven選項問題 1.10 SpringBoot版…

你的Prompt還有很大提升

與AI協作,Prompt(提示詞)是溝通的橋梁。一個優秀的Prompt能讓AI的輸出事半功倍,而一個模糊的Prompt則可能導致南轅北轍的結果。如果你覺得AI的回答不夠精準、缺乏深度,或者總帶著一股“AI味”,那很可能是你…

3、Configuring Topics

如果您在應用程序上下文中定義了KafkaAdmin bean,它可以自動向代理添加主題。為此,您可以將每個主題的NewTopicBean添加到應用程序上下文中。2.3版本引入了一個新的類TopicBuilder,使創建此類bean更加方便。以下示例顯示了如何執行此操作&…

FastAPI+React19開發ERP系統實戰第04期

一、效果預覽 1.1 首頁 1.2 首頁暗黑模式 1.3 登錄頁 1.4 登錄頁暗黑模式 二、搭建React開發環境 2.1 項目依賴 package.json {"name": "erp-web","version": "1.0.0","description": "ERP系統前端 - React 19&quo…

數據庫|了解達夢數據庫并做安裝前的準備

哈嘍,你好啊,我是雷工! 你都用過哪些數據庫? 使用過的數據庫中覺得哪個數據庫最好用? 你使用過達夢數據庫嗎? 最近在做的一個SCADA項目,要求信創版本,其中數據庫也要使用信創目錄…

Java驅動AI革命:Spring AI八篇進階指南——從架構基礎到企業級智能系統實戰

系列文章目錄 提示:下面列出了整個系列的完整目錄,建議收藏本篇作為總覽入口:本人將在7月份更新完畢 第一篇:Spring AI 概述與架構設計 第二篇:Spring AI 基本組件詳解——ChatClient、Prompt、Memory 第三篇&#x…

hysAnalyser --- 支持菁彩視聽雙Vivid媒體信息解析

摘要 本文主要介紹 hysAnalyser 支持HDR Vivid格式的分析案例,滿足用戶分析HDR vivid 和 Audio Vivid格式的需要。 現將 hysAnalyser 新版本(v1.1.000)發布給網友使用,希望能幫助到更多音視頻開發的愛好者。使用過程中,若遇到問題請您通過 G…

C++中NULL等于啥

文章目錄 **一、`NULL` 的標準定義****二、常見實現方式**1. **定義為整數 `0`**2. **定義為 `0L` 或 `(void*)0`**(較少見)**三、與C語言的關鍵區別****四、`NULL` 在C++中的問題**1. **重載函數匹配歧義**2. **模板參數推導錯誤****五、C++11+ 的替代方案:`nullptr`****六…

pyhton基礎【20】面向對象進階一

目錄 一.進階 類方法和靜態方法 屬性(Properties) 繼承和多態 抽象基類(Abstract Base Classes - ABCs) 魔術方法(Magic Methods) 組合和聚合 使用場景 二.私有屬性 實現對數據的隱藏 設置私有屬性 添加額外對屬性操作的方法 三.私有方法 實現對方法的隱藏 直接…