MVC、MVP、MVCC 和 MVI 架構的介紹及區別對比

??作者簡介:大家好,我是 Meteors., 向往著更加簡潔高效的代碼寫法與編程方式,持續分享Java技術內容。
🍎個人主頁:Meteors.的博客
💞當前專欄:
?特色專欄: 知識分享
🥭本文內容: MVC、MVP、MVCC 和 MVI 架構的介紹及區別對比
📚 ** ps ** ?: 閱讀文章如果有問題或者疑惑,歡迎在評論區提問或指出。


目錄

一、背景

??1. MVC(Model-View-Controller)??

??核心思想??

??特點??

??問題??

??2. MVP(Model-View-Presenter)??

??核心思想??

??特點??

??變體??

??問題??

??3. MVCC(Model-View-Controller-Components)??

??核心思想??

??特點??

??與MVC區別??

??4. MVI(Model-View-Intent)??

??核心思想??

??特點??

??關鍵概念??

二、??架構對比表??

??三、如何選擇?

??四、趨勢??


一、背景

初入安卓開發,便遇到的以前做后端從未見過的設計模式。MVI?MVI是什么.....于是在網上撲騰資料,逐漸學習了多種架構模式。MVC、MVP、MVCC 和 MVI 是軟件設計和架構中常見的模式或概念,各自適用于不同的場景。


??1. MVC(Model-View-Controller)??

??核心思想??
  • ??Model??:數據邏輯和業務規則,獨立于UI。

  • ??View??:用戶界面展示,被動反映Model狀態。

  • ??Controller??:接收用戶輸入,協調Model和View的更新。

??特點??
  • ??View直接依賴Model??:Model變化時直接通知View(如觀察者模式)。

  • ??Controller職責模糊??:在復雜場景中可能成為“上帝類”。

  • ??典型應用??:傳統Web框架(如Spring MVC)、早期iOS開發。

??問題??
  • ??緊耦合??:View和Model直接交互,難以測試。

  • ??Controller膨脹??:業務邏輯易堆積在Controller中。


??2. MVP(Model-View-Presenter)??

??核心思想??
  • ??Model??:與MVC相同,處理數據邏輯。

  • ??View??:被動界面,通過接口與Presenter交互。

  • ??Presenter??:取代Controller,作為中間人處理業務邏輯,解耦View和Model。

??特點??
  • ??View與Model完全隔離??:所有交互通過Presenter。

  • ??測試友好??:Presenter可脫離View進行單元測試。

  • ??典型應用??:Android開發(如Google官方早期示例)、WinForms。

??變體??
  • ??Passive View??:View極簡,所有邏輯在Presenter。

  • ??Supervising Controller??:View可處理簡單邏輯。

??問題??
  • ??手動同步??:需顯式更新View,代碼量可能增加。

  • ??Presenter可能過重??:復雜場景下仍需拆分。


??3. MVCC(Model-View-Controller-Components)??

??核心思想??
  • ??擴展MVC??:引入Components(可復用的UI組件),每個組件有自己的MVC三角。

  • ??分層協作??:父Controller協調子Components。

??特點??
  • ??模塊化??:適合大型應用(如ERP系統)。

  • ??典型應用??:后端復雜UI系統(如JavaServer Faces)。

??與MVC區別??
  • ??組件化??:UI拆分為獨立功能單元,降低耦合。

  • ??層級化??:父子Controller/Component的協作關系。


??4. MVI(Model-View-Intent)??

??核心思想??
  • ??單向數據流??:用戶輸入(Intent)→ Model更新 → View渲染。

  • ??不可變Model??:狀態不可變,每次更新生成新Model。

  • ??響應式編程??:基于RxJava或Kotlin Flow實現數據流。

??特點??
  • ??狀態集中管理??:所有狀態變化可預測、易調試。

  • ??適合復雜交互??:如實時數據更新(股票應用、聊天軟件)。

  • ??典型應用??:現代Android開發(Jetpack Compose)、前端(React+Redux)。

??關鍵概念??
  • ??Intent??:用戶動作的抽象表示(如按鈕點擊→LoadDataIntent)。

  • ??狀態機??:View僅反映當前Model狀態。


二、??架構對比表??

特性

MVC

MVP

MVCC

MVI

??核心目標??

基礎分離關注點

解耦View與Model

組件化復用

單向數據流+狀態管理

??數據流向??

雙向(View?Model)

雙向(通過Presenter)

層級化雙向

嚴格單向(Intent→Model→View)

??測試難度??

較難(View耦合)

較易(Presenter可測)

中等(組件依賴)

易(狀態可追蹤)

??適用場景??

簡單Web/iOS應用

傳統Android應用

企業級后端UI

現代響應式應用

??典型框架??

Spring MVC, Django

Android Architecture

JSF, ASP.NET

Jetpack Compose, Redux


??三、如何選擇?

  • ??快速開發簡單應用??:MVC(如博客網站)。

  • ??需要高可測試性??:MVP(遺留Android項目)。

  • ??企業級復雜UI??:MVCC(后臺管理系統)。

  • ??現代響應式UI??:MVI(實時數據應用、移動端)。


??四、趨勢??

  • ??移動端??:MVP → MVVM(Data Binding) → MVI(Jetpack Compose)。

  • ??前端??:MVC → Flux/Redux(類似MVI)。

  • ??后端??:MVC → 分層架構(DDD+CQRS)。


?最后,

? ? ? ? 希望文章對你有所幫助!

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

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

相關文章

【運維進階】Ansible 角色管理

Ansible 角色管理 實驗環境 [lthcontroller ~ 21:47:45]$ mkdir web && cd web[lthcontroller web 21:47:50]$ cat > ansible.cfg <<EOF [defaults] remote_user lth inventory ./inventory[privilege_escalation] become True become_user root become_m…

個人筆記SpringMVC

SpringMVC 1. 1.新建一個Maven-webapp項目 2.導入依賴pom.xml <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.…

arcgis-提取范圍中最大占比面積的信息或唯一值

此方法本來應用于計算圖斑占最大面積的房屋質量等別/高程/坡度級別&#xff08;房屋質量等別/高程/耕地坡度計算在無特定條件下&#xff0c;遵循按面積占比最大值信息賦值&#xff09;。1、測試數據中&#xff0c;增加唯一值字段&#xff1a;WYZ&#xff0c;并刷上圖斑唯一值信…

Webapi發布后IIS超時(.net8.0)

文章目錄前言一、報錯信息二、日志分析三、分析四、最終解決辦法&#xff1a;前言 最近實現服務器數據導出&#xff1a; .net8.0的webapi 獲取到post請求&#xff0c;查詢數據后dbReader導出到workbook. 并保存Excel到遠程的文件服務器。 問題&#xff1a;本地調試無問題&…

linux中的hostpath卷、nfs卷以及靜態持久卷的區別

在 Linux 容器環境中&#xff0c;HostPath 卷、NFS 卷和靜態持久卷&#xff08;Static PersistentVolume&#xff09;是數據持久化的重要方案。三者的核心差異體現在管理方式、適用場景、跨節點能力等方面。核心定義與工作原理1. HostPath 卷定義&#xff1a;直接將容器所在宿主…

Unity 中控開發 多路串口服務器(一)

一 Unity 中控開發 多路串口服務器 多路串口服務器基礎型號配置被控投影設備LG-UART8 算法配置軟件結果測試多路串口服務器 你好&#xff01; 這是關于一篇使用TCP調用多路串口服務器的系列文章。在后續文章中,會結合使用Unity做一個中控系統 基礎 型號 ULEGS 多路串口服務…

服務器數據恢復—硬盤壞道離線導致raid崩潰的StorNext文件系統數據恢復案例

服務器存儲數據恢復環境&故障&#xff1a; 一臺昆騰存儲設備中有一組raid5磁盤陣列。陣列上有兩塊硬盤先后離線&#xff0c;raid5磁盤陣列不可用。服務器存儲數據恢復過程&#xff1a; 1、將故障服務器存儲內的所有磁盤編號后取出&#xff0c;將所有沒有離線的硬盤以只讀方…

C++小游戲NO.1游戲機

#include<conio.h> #include<windows.h> #include<bits/stdc.h> #include<cstdlib> #include<ctime> #include<vector> #include<string> using namespace std; int Your6,Other6; string daojuname[]{"放大鏡","sho…

OpenHarmony WebView引擎:從Chromium魔改到分布式渲染的終極解析

??? 架構解析 arkweb是OpenHarmony webview組件的Native引擎,基于Chromium和CEF構建。 OpenHarmony WebView是基于Chromium CEF構建的高性能Web渲染引擎,為OpenHarmony系統提供完整的Web內容展示能力。該引擎采用分層架構設計,實現了與ArkUI的深度集成。 ??? 架構設…

Mybatis-3自己實現MyBatis底層機制

MyBatis整體架構分析一圖勝千言1、Mybatis核心框架示意圖2、對上圖的解讀1)mybatis的核配置文件mybatis-config.xml:進行全局配置&#xff0c;全局只能有一個這樣的配置文件XxxMapper.xml配置多個SQL,可以有多個XxxMappe.xml配置文件 2)通過mybatis-config.xml配置文件得到SqlS…

Uniapp 之renderjs解決swiper+多個video卡頓問題

一、效果圖二、示例代碼 test.vue<template><view style"" :style"{height: windowHeightpx}"><swiper class"video-swiper" vertical change"swiperChange" :current"current" animationfinish"swiper…

設計模式之【快速通道模式】,享受VIP的待遇

文章目錄一、快速通道模式簡介1、簡介2、適用場景二、示例1、JDK源碼&#xff1a;ArrayList構造方法2、String.intern()方法3、緩存系統設計&#xff08;典型&#xff09;三、注意事項1、核心設計原則2、避坑指南參考資料一、快速通道模式簡介 1、簡介 快速通道模式是一種基于…

NineData云原生智能數據管理平臺新功能發布|2025年7月版

本月發布 23 項更新&#xff0c;其中重點發布 8 項、功能優化 15 項。重點發布數據庫 DevOps - 非表對象調試新增存儲過程、函數、包的調試功能&#xff0c;支持對象編譯、斷點設置、執行控制&#xff08;continue/step into/step over&#xff09;、變量調試等全流程操作。數據…

APM32芯得 EP.29 | 基于APM32F103的USB鍵盤與虛擬串口復合設備配置詳解

如遇開發技術問題&#xff0c;歡迎前往開發者社區&#xff0c;極海技術團隊將在線為您解答~ 極海官方開發者社區?https://community.geehy.cn/ 《APM32芯得》系列內容為用戶使用APM32系列產品的經驗總結&#xff0c;均轉載自21ic論壇極海半導體專區&#xff0c;全文未作任何修…

css過渡屬性

前言 該屬性用于元素各種 “改變” 后的過渡效果動畫&#xff0c;包括但不限于顏色、寬高、縮放等。 如下圖所示&#xff0c;使用過渡屬性便可輕松完成。 示例代碼 您可以直接復制運行&#xff0c;查看效果。 <div>demo</div>div {width:100px; height:100px;/* …

云計算核心技術之云存儲技術

一、云存儲技術1.1、云存儲是什么從狹義上來說&#xff0c;云存儲是指通過虛擬化、分布式技術、集群應用、網格技術、負載均衡等技術&#xff0c;將網絡中大量的存儲設備通過軟件集合起來高效協同工作&#xff0c;共同對外提供低成本、高擴展性的數據存儲服務。從廣義上來講&am…

在Ubuntu上安裝并使用Vue2的基本教程

我也準備要嘗試一些前端開發了&#xff01;發現網上有些教程寫得挺好&#xff0c;但是還是有點老&#xff08;并且有點錯誤&#xff09;&#xff0c;所以這里更新一下&#xff1a; 主要參考了這篇教程&#xff1a;Vue2——1. 安裝教程_vue2 cdn-CSDN博客 并且使用NPM方式進行…

任務十九 打包部署

一、本地打包部署 首先在自己的電腦上,下載一個nginx nginx: download 之后再vscode中,進行打包 輸入命令 npm run build 打包過后,會在項目的根目錄下,生成一個dist的文件夾

《飛算Java AI使用教程:從安裝入門到實踐項目》

前引&#xff1a;在當今人工智能技術飛速發展的時代&#xff0c;Java作為企業級開發的主流語言&#xff0c;正與AI技術深度融合。飛算Java AI是一款強大的工具集&#xff0c;旨在幫助開發者輕松構建和部署智能應用&#xff0c;涵蓋機器學習、自然語言處理等核心功能。本教程將帶…

NestJS 依賴注入方式全解

一、基礎注入方式 1. 構造函數注入&#xff08;Constructor Injection&#xff09; 適用場景&#xff1a;模塊間依賴傳遞&#xff0c;服務初始化時必須存在的依賴 實現方式&#xff1a;通過構造函數參數聲明依賴&#xff0c;NestJS 自動解析并注入 Injectable() class UserServ…