從職責劃分看架構:MVC 的 Controller 與 MVVM 的 ViewModel 差異

深入淺出:前端MVC與MVVM架構模式,你真的懂了嗎??

序言

各位前端的“程序猿”和“程序媛”們,大家好!👋 在前端開發的江湖中,MVC和MVVM這兩個詞,就像武林秘籍一樣,常常被提起。它們到底是什么?又有什么區別?今天,就讓我們一起揭開它們的神秘面紗,用最通俗易懂的方式,帶你一探究竟!

什么是MVC?🔧

MVC,全稱Model-View-Controller,顧名思義,它將應用程序分成了三個核心部分:模型(Model)、視圖(View)和控制器(Controller)。這三者各司其職,又相互協作,共同構建起一個完整的應用程序。

視圖(View)

想象一下,你正在瀏覽一個網頁,看到的所有按鈕、文本框、圖片等等,這些都是“視圖”的范疇。簡單來說,視圖就是用戶能夠看到并與之交互的界面。在前端開發中,HTML就是視圖的重要組成部分,它負責展示數據。

控制器(Controller)

當你在網頁上點擊一個按鈕,或者輸入一些文字時,這些用戶操作就需要被處理。這時候,“控制器”就登場了!控制器是應用程序中處理用戶交互的部分。它就像一個“管家”,接收用戶的輸入,然后根據這些輸入,告訴模型和視圖該做什么。通常,控制器會從視圖層讀取數據,控制用戶的輸入,并向模型發送數據。

模型(Model)

“模型”是應用程序中處理數據的邏輯部分,它負責數據的存儲、獲取和業務邏輯的處理。你可以把它想象成應用程序的“大腦”,所有的數據操作和業務規則都在這里進行。當數據發生變化時,模型會通知控制器,控制器再決定如何更新視圖。

MVC的交互模式🔄

MVC的交互模式一般有兩種:

  1. 通過View接受指令,傳遞給Controller: 這種模式下,用戶在視圖上的操作會直接觸發視圖中的事件,然后視圖將這些事件傳遞給控制器進行處理。
  2. 直接通過Controller接受指令: 另一種模式是用戶操作直接被控制器捕獲并處理。

下面我們通過一張圖來更直觀地理解MVC的交互流程:

在這里插入圖片描述

從圖中我們可以看到,當用戶發起一個請求時,請求會先到達服務器,經過路由(Route)分發給對應的控制器。控制器會從模型中獲取數據,然后將數據渲染到視圖上,最后將渲染好的視圖返回給客戶端。整個過程就像一個精密的流水線,每個環節都緊密相連。

什么是MVVM?💡

MVVM,全稱Model-View-ViewModel,是MVC模式的一種演變,它在前端領域尤其受到青睞,像Vue和Angular這樣的流行框架都采用了這種模式。MVVM在MVC的基礎上引入了ViewModel,改變了傳統的通信方式,讓前端開發變得更加高效和優雅。

組成部分

MVVM同樣由三部分組成:

  • Model: 和MVC中的Model類似,它仍然是應用程序中提供數據的部分,負責數據的存儲和業務邏輯。
  • View: 視圖,也就是用戶看到的界面部分,和MVC中的View概念一致。
  • ViewModel: 這是MVVM的核心!ViewModel將View中的狀態和行為抽象化,它負責取出Model的數據,并處理View中由于需要展示內容而涉及的業務邏輯。ViewModel可以看作是View的Model,它暴露數據給View,并處理View的交互邏輯。

MVVM的特點🌟

MVVM模式最大的亮點在于它的“雙向綁定”機制。View的變動會自動反映在ViewModel,反之亦然。這就像給View和ViewModel之間架起了一座“鵲橋”,它們之間的數據流動變得異常順暢。這種雙向綁定帶來了許多優點:

  • 低耦合: 視圖(View)可以獨立于Model變化和修改。一個ViewModel可以綁定到不同的“View”上,當View變化時Model可以不變,當Model變化時View也可以不變。這大大降低了視圖和模型之間的耦合度,讓代碼更容易維護和擴展。
  • 可重用性: 你可以把一些視圖邏輯放在一個ViewModel里面,讓很多View重用這段視圖邏輯。這意味著你可以創建可復用的UI組件,提高開發效率。
  • 獨立開發: 開發人員可以專注于業務邏輯和數據的開發(ViewModel),設計人員可以專注于頁面設計。這種分工合作的方式,讓團隊協作更加高效。

下面是MVVM的架構圖,幫助你更好地理解:

在這里插入圖片描述

MVC與MVVM的異同點🤔

看到這里,你可能會覺得MVC和MVVM有點像,又有點不像。別急,我們來總結一下它們的異同點:

相同點

  • 分層思想: 兩者都采用了分層的思想,將應用程序的不同職責分離,提高了代碼的可維護性和可擴展性。
  • 都包含Model和View: 它們都包含模型(Model)和視圖(View)這兩個核心組件,分別負責數據和界面展示。

不同點

最大的不同點在于它們對“控制器”的處理方式以及數據流動的方向。

特性MVCMVVM
核心組件Model、View、ControllerModel、View、ViewModel
數據流單向數據流(View -> Controller -> Model -> View)雙向數據綁定(View <-> ViewModel,ViewModel -> Model)
耦合度View和Controller之間耦合度較高View和ViewModel之間通過數據綁定解耦
職責Controller負責處理用戶輸入、業務邏輯和視圖更新ViewModel負責暴露數據、處理視圖邏輯和與Model交互
適用場景傳統后端渲染的Web應用,桌面應用前端富應用,特別是數據驅動的UI框架(如Vue、React)

總結

無論是MVC還是MVVM,它們都是為了解決軟件開發中的復雜性而誕生的架構模式。理解它們的核心思想,能夠幫助我們更好地組織代碼,提高開發效率,構建出更健壯、更易維護的應用程序。希望通過這篇博客,你對MVC和MVVM有了更深入的理解!如果你有任何疑問或者想分享你的看法,歡迎在評論區留言哦!👇

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

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

相關文章

Vue-color:Vue.js 專業顏色選擇器組件庫 – 支持Vue2/3,TypeScript,暗色主題

簡介 Vue-color 是一個專為 Vue.js 設計的顏色選擇器組件庫&#xff0c;提供了多種風格的顏色選擇器組件。它支持 Vue 2.7 和 Vue 3&#xff0c;具有 TypeScript 支持、SSR 兼容性和暗色主題支持。 特性 多種顏色選擇器 – 提供 Chrome、Sketch、Photoshop 等多種風格Vue 2.…

ArcGIS定向影像(2)——非傳統影像輕量級解決方案

ArcGIS能讓用戶自己低成本的做出谷歌街景嗎&#xff1f;現在ArcGIS Pro 3.2 和 ArcGIS Enterprise 11.2 能夠讓用戶不使用任何插件和擴展的情況下完成街景數據集的構建&#xff0c;數據管理&#xff0c;發布服務和調用的完整解決方案。非常體系化&#xff0c;由底層數據驅動&am…

CKA05--service

Task 重新配置 spline-reticulator namespace 中現有的 front-end Deployment&#xff0c;以公開現有容器 nginx 的端口 80/tcp 創建一個名為 front-end-svc 的新 Service &#xff0c;以公開容器端口 80/tcp 配置新的 Service &#xff0c;以通過 NodePort 公開各個 Pod 解析&…

用 Go 采集服務器資源指標:從原理到實踐

在后端開發或運維工作中&#xff0c;采集服務器資源指標 是個繞不開的需求&#xff1a; 運維要看 CPU、內存、磁盤的使用情況監控系統要定期上報這些數據應用程序有時候也需要根據系統負載做限流、彈性伸縮 那么問題來了&#xff1a;用 Go 怎么優雅地采集這些指標呢&#xff…

安卓學習 之 上下文菜單的操作

先來認識一下上下文菜單是什么樣子的&#xff1f;如圖&#xff0c;當長按一個控件時彈出來的菜單叫做上下文菜單&#xff1a;圖中第一個和第二個就是一個上下文菜單&#xff0c;第二個菜單里面還有一層菜單&#xff0c;這個上下文菜單被綁定到注冊按鈕中&#xff0c;也就是長按…

fabric啟動節點var/hyperledger/production: permission denied

場景我在節點的compose文件中進行了數據掛載&#xff1a;- ../../data/bank1/peer1:/tmp/hyperledger/bank1/peer1但是運行是依然報錯為var/hyperledger/production的權限問題&#xff0c;并且我也已經對../../data/bank1/peer1目錄設置了操作權限services:peer1-bank1:contain…

uni-app + Vue3 開發展示 echarts 圖表

場景:使用 uni-app 開發手機端,需要展示 echarts 圖表 1. 打開 uni-app 官網 https://uniapp.dcloud.net.cn/ 2. 點擊右上角搜索 3. 點擊插件市場,搜索 echarts 找到 echarts 插件 4. 下載到自己的項目中 使用詳情在該頁面下方.

給AI配一臺手機+電腦?智譜AutoGLM上線!

早上剛坐進地鐵&#xff0c;對著手機隨口說句 “整理上周銷售周報”&#xff0c;等你到公司打開電腦&#xff0c;Excel 數據統計表、PPT 匯報版已經整整齊齊躺在桌面 —— 這不是科幻片里的畫面&#xff0c;而是智譜 AutoGLM 2.0 帶來的真實體驗。2025年8月20日&#xff0c;智譜…

NGUI--游戲登錄、注冊和服務器選擇系統??

項目核心思路該項目實現了一個完整的游戲賬號流程&#xff1a;??用戶側流程??&#xff1a;新用戶注冊 -> 返回登錄 -> 輸入賬號密碼 -> 選擇游戲服務器 -> 進入游戲。??數據管理??&#xff1a;所有數據&#xff08;賬號信息、服務器列表、用戶選擇&#xf…

自動化測試框架是軟件測試的核心基礎設施,通過預設規則和腳本自動執行測試用例,顯著提高測試效率和覆蓋率。

1. 自動化測試框架1.1 概述自動化測試框架是軟件測試的核心基礎設施&#xff0c;通過預設規則和腳本自動執行測試用例&#xff0c;顯著提高測試效率和覆蓋率。現代AI驅動的自動化測試框架結合了機器學習、自然語言處理和計算機視覺技術&#xff0c;實現了更智能的測試用例生成、…

在 Ubuntu 系統中利用 conda 創建虛擬環境安裝 sglang 大模型引擎的完整步驟、版本查看方法、啟動指令及驗證方式

以下是在 Ubuntu 系統中利用 conda 創建虛擬環境安裝 sglang 大模型引擎的完整步驟、版本查看方法、啟動指令及驗證方式,全程使用清華源加速,并包含關鍵注意事項: 一、完整安裝步驟(基于 conda + 清華源) 1. 準備工作:安裝 conda 并配置清華源 (1)安裝 Miniconda #…

Unity Excel數據導入工具

UnityExcelImporterX - Unity Excel數據導入工具 自動將Excel文件&#xff08;.xls, .xlsx&#xff09;中的數據轉換為Unity的ScriptableObject資源。 項目基于unity-excel-importer&#xff0c;增加了一些新特性。項目地址&#xff1a;github.com/nayaku/UnityExcelImporter…

np.linalg 函數一覽

&#x1f4da; 常用 np.linalg 函數一覽下面是一些最常用的功能和示例&#xff1a;1. np.linalg.norm() —— 計算向量或矩陣的范數python深色版本import numpy as npv np.array([3, 4]) print(np.linalg.norm(v)) # L2 范數&#xff08;模長&#xff09;: √(34) 5.0A np.…

Linux入門(二)

計算機原理系列 歡迎大家關注「海拉魯知識大陸」 多交流不迷路 Linux入門&#xff08;二&#xff09; 在上一章Linux入門(一)中rm -rf /是比較簡單的哈&#xff0c;那么升級一下&#xff1a;xargs指令的作用是啥呢&#xff1f; 1.進程 應用的可執行文件是放在文件系統里&a…

開發與維護nodejs工具庫或自定義npm包

h5打開以查看 一、初始設置&#xff1a;為成功發布做好準備 1. 項目初始化與結構 bash # 創建項目目錄并初始化 mkdir my-awesome-lib cd my-awesome-lib npm init -y 推薦的項目結構&#xff1a; text my-awesome-lib/ ├── src/ # 源代碼目錄 │ └──…

IntelliJ IDEA 的 Git 功能

1. 克隆&#xff08;Clone&#xff09;項目 這是你開始的第一步。你需要將遠程倉庫的代碼克隆到本地。 打開 IDEA&#xff0c;選擇 Get from VCS。在彈出的窗口中&#xff0c;選擇 Git。粘貼遠程倉庫的 URL&#xff08;通常來自 GitHub、GitLab 等&#xff09;。選擇一個本地目…

fastapi全局注入mysql,單數據庫

1、封裝sql連接 test_db.py from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession from sqlalchemy.orm import sessionmaker from fastapi import Request, Depends# 1. 數據庫連接配置 async_engine create_async_engine("mysqlaiomysql://root:root…

深度學習常見應用算力要求?

深度學習常見應用的算力要求&#xff0c;首先需要明確算力的核心衡量維度&#xff1a;計算能力&#xff1a;以每秒浮點運算次數&#xff08;FLOPS&#xff0c;如 TF32/FP16/FP8 精度下的吞吐量&#xff09;衡量&#xff0c;決定任務運行速度&#xff1b;顯存容量&#xff1a;決…

邪修實戰系列(5)

1、第一階段邪修實戰總覽&#xff08;9.1-9.30&#xff09; 把第一階段&#xff08;基礎夯實期&#xff09;的學習計劃拆解成極具操作性的每日行動方案。這個計劃充分利用我“在職學習”的特殊優勢&#xff0c;強調“用輸出倒逼輸入”&#xff0c;確保每一分鐘的學習都直接服務…

Python TensorFlow的CNN-LSTM-GRU集成模型在邊緣物聯網數據IoT電動汽車充電站入侵檢測應用

全文鏈接&#xff1a;https://tecdat.cn/?p43881 原文出處&#xff1a;拓端抖音號拓端tecdat 隨著物聯網&#xff08;IoT&#xff09;技術在電動汽車充電站&#xff08;EVCS&#xff09;中的普及&#xff0c;充電站不僅成為智能交通的關鍵節點&#xff0c;更因連接電網、用戶設…