??作者簡介:大家好,我是 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)。
?最后,
? ? ? ? 希望文章對你有所幫助!