1. 程式人生 > >MVC、MVP和MVVM

MVC、MVP和MVVM

MVC

1、簡介

MVC全名是Model View Controller,用一種業務邏輯、資料、介面顯示分離的分離的方法組織程式碼,在改進和個性化定製介面及使用者互動的同時,不需要重新編寫業務邏輯。如圖所示。

mvc.png

其中,

Model:處理資料、業務邏輯等。

View:處理介面的顯示結果。

Controller:起到橋樑的作用,來控制V和M層通訊,達到分離檢視顯示和業務邏輯層。

2、在Android中

Model: 業務模型,建立的資料結構和相關的類。對資料庫的操作、對網路等的操作都應該在Model裡面處理。

View: 一般採用XML檔案進行介面的描述。

Controller

:通常由Activity承擔。這句話也就暗含了不要在Activity中寫邏輯程式碼,要通過Activity交割給Model業務邏輯層處理,這樣做的另外一個原因是Android中的Actiivity的響應時間是5s,如果耗時的操作放在這裡,程式就很容易被回收掉。

3、優缺點

  • 優點

程式碼結構簡單,所有通訊是單向的。

  • 缺點

(1)xml作為view層,控制能力實在太弱了。你想去動態的改變一個頁面的背景,或者動態的隱藏/顯示一個按鈕,這些都沒辦法在xml中做,只能把程式碼寫在activity中,造成了activity既是controller層,又是view層的這樣一個窘境。

(2)隨著介面及其邏輯的複雜度不斷提升,Activity類的職責不斷增加,以致變得龐大臃腫。

(3)view層和model層是相互可知的,這意味著兩層之間存在耦合。

MVP

1、簡介

MVP與MVC有一定的相似性:Controller/Presenter負責邏輯的處理,Model提供資料,View負責顯示。如圖所示。

mvp.png

2、在Android中

Model: 負責儲存、檢索、操作資料, 可以實現一個Model interface用來降低耦合。

View: 負責繪製UI元素、與使用者進行互動,體現為Activity、Fragment等。可以實現一個View interface來降低耦合,方便進行單元測試。

Presenter: 作為View與Model互動的中間紐帶,處理與使用者互動邏輯。

資料流方向:V -> P -> M -> P -> C

3、優缺點

  • 優點

(1)模型與檢視完全分離,我們可以修改檢視而不影響模型。

(2)可以更高效地使用模型,因為所有的互動都發生在一個地方——Presenter內部。

(3)一個Presenter用於多個檢視,方便單元測試。

  • 缺點

(1)P層與V層是通過介面進行互動,介面粒度不好控制。粒度太小,就會存在大量介面的情況,使程式碼太過碎片化。粒度太大,解耦效果不好。

(2)MVP是以UI為驅動的模型,更新UI都需要保證能獲取到控制元件的引用,同時更新UI的時候要考慮當前是否是UI執行緒,也要考慮Activity的生命週期

(3)複雜的業務同時也可能會導致P層太大,最終P層程式碼過於臃腫。

MVVM

1、簡介

MVVM可以當作MVP的升級版,其中的VM是ViewModel的縮寫,ViewModel可以理解成是View的資料模型和Presenter的合體,ViewModel和View之間的互動通過Data Binding完成,而Data Binding可以實現雙向的互動,這就使得檢視和控制層之間的耦合程度進一步降低,關注點分離更為徹底,同時減輕了Activity的壓力。如圖所示。

mvvm.png

2、在Android中

Model: 與MVP的Model類似,資料物件,提供資料操作的介面,同時在資料變化時發出變更通知。

View:與MVP的View類似,UI層,展示介面。

ViewModel:指View的Model,包含View的一些資料屬性和操作,關鍵技術是資料繫結DataBinding, View的變化直接影響ViewModel, ViewModel的變化或者內容會直接體現在View上。

3、優缺點

  • 優點

(1)雙向繫結技術,當Model變化時,View-Model會自動更新,View也會自動變化,很好做到資料的一致性。

  • 缺點

(1)資料繫結使得 Bug 很難被除錯。你看到介面異常了,有可能是你 View 的程式碼有 Bug,也可能是 Model 的程式碼有問題。

(2)不利於程式碼重用。客戶端開發最常用的重用是View,但是資料雙向繫結技術,讓你在一個View都綁定了一個model,不同模組的model都不同。

參考文章

相關推薦

【iOS】MVCMVPMVVM

MVC MVC模式涉及三種物件:模型物件、檢視物件、控制器物件。模型物件中儲存有應用程式的資料,檢視物件負責顯示模型物件的資料,並且允許使用者對其進行編輯。控制器物件是模型物件和檢視物件之間的協調者,負責對模型物件進行初始化,並將模型物件傳遞給檢視物件進行解析顯示。  

細說Android框架設計三劍客MVCMVPMVVM

    最近幾年的移動端開發越來越火,功能越來越強大,處理業務越來越複雜,因此對系統擴充套件性的要求越來越高。而為了更好地進行移動端架構設計,我們最常用的就是MVC和MVP,今天本篇部落格就和大家一起聊一聊這兩種框架設計。 MVC框架 MVC的定義

Android框架MVCMVPMVVM探究(圖解+案例+附原始碼)

1、介紹 MVC、MVP、MVVM這些模式是為了解決開發過程中的實際問題而提出來的,目前作為主流的幾種架構模式而被廣泛使用。本文程式碼 2、瞭解並區分MVC,MVP,MVVM 2.1 MVC MVC,(Model View Controller)

MVCMVPMVVM

MVC 1、簡介 MVC全名是Model View Controller,用一種業務邏輯、資料、介面顯示分離的分離的方法組織程式碼,在改進和個性化定製介面及使用者互動的同時,不需要重新編寫業務邏輯。如圖所示。 其中, Model:處理資料、業務邏輯等

MVCMVP MVVM

指令 hang mvc route text nts -i fonts ng- MVC,MVP 和 MVVM 的圖示 MVC(Model-View-Controller)是最常見的軟件架構之一,業界有著廣泛應用。它本身很容易理解,但是要講清楚,它與衍生的 MVP 和 MV

MVCMVP MVVM 的圖示

綁定 則無 作用 com 理解 兩種 區別 維護 保留 http://www.ruanyifeng.com/blog/2015/02/mvcmvp_mvvm.html 復雜的軟件必須有清晰合理的架構,否則無法開發和維護。 MVC(Model-View-Controlle

MVCMVP MVVM 的詳解

name one control ember 模式 hash 改名 主動性 主動 一、MVC MVC模式的意思是,軟件可以分成三個部分。 視圖(View):用戶界面。 控制器(Controller):業務邏輯 模型(Model):數據保存 各部分之間的通信方式如下

MVCMVP MVVM 的圖示,區別

mage 否則 nbsp lan ng- 意思 scrip 業界 作用 作者: 阮一峰 日期: 2015年2月 1日 復雜的軟件必須有清晰合理的架構,否則無法開發和維護。 MVC(Model-View-Controller)是最常見的軟件架構之一,業界有著廣泛應用。它本身

MVCMVPMVVM之間的關系

mvp 工作 更多 lan mod 技術 https v-model 產生 介紹   寫這篇隨筆完全是為了加深自己的印象,畢竟寫比看能獲得得更多,另外本人對這三種模式的認識還是淺薄的,有待在以後的工作學習中有更深入的理解,因此不免會有誤解,這裏推薦大家閱讀廖雪峰關於MVV

MVCMVP MVVM 的區別

一、MVC MVC模式的意思是,軟體可以分成三個部分。 檢視(View):使用者介面。 控制器(Controller):業務邏輯 模型(Model):資料儲存   1.View 傳送指令到 Controller 2.Controller 完

MVCMVP MVVM(轉載)

1 什麼是MVC MVC的目的是為了把資料(Model)和檢視(View)分離開來,然後用控制器(Controller)作膠水來粘合M和V之間的關係。 這樣做的目的是為了實現注意點分離這樣一個更高層次的設計理念,也就是讓專業的物件做專業的事情,View就只負責檢視相關的東西,Mode

淺談MVCMVP MVVM 的區別

複雜的軟體必須有清晰合理的架構,否則無法開發和維護。 以下以Javascript客戶端頁面開發為例使用圖示簡單闡述三者的聯絡和區別。 需要注意的是,MVC開發模式備廣泛用於各種軟體開發中,包括網際網路的B/S模式的產品,而其他兩種模式大多數用在客戶端開發中,例如:Javascrtipt、WPF、Adn

Android App的三種架構模式MVCMVPMVVM

http://www.2cto.com/kf/201506/405766.html MVC使用總結 利用MVC設計模式,使得這個天氣預報小專案有了很好的可擴充套件和維護性,當需要改變UI顯示的時候,無需修改Contronller(控制器)Activity的程式

教你認清MVCMVPMVVM三種模式

相信大家對MVC,MVP和MVVM都不陌生,作為三個最耳熟能詳的Android框架,它們的應用可以是非常廣泛的,但是對於一些新手來說,可能對於區分它們三個都有困難,更別說在實際的專案中應用了,有些時候想用MVP的,程式碼寫著寫著就變成了MVC,久而久之就對它們三

設計模式-MVCMVP MVVM

複雜的軟體必須有清晰合理的架構,否則無法開發和維護。 MVC(Model-View-Controller)是最常見的軟體架構之一,業界有著廣泛應用。它本身很容易理解,但是要講清楚它與衍生的 MVP 和 MVVM 架構的區別就不容易了。 昨天晚上,我讀了《Scali

認清Android框架 MVCMVPMVVM

(2)知道這三種模式在Android中如何使用。 (3)走出data binding的誤區。 (4)瞭解MVP+data binding的開發模式。 本篇文章的demo我將會上傳到我的github上。 水之積也不厚,則其負大舟也無力 正如莊子在逍遙遊中說的,如果水不夠深,那就沒有能夠擔負大船的

android中MVCMVPMVVM三種模式詳解析

我們都知道,android本身就採用了MVC模式,model層資料來源層我們就不說了,至於view層即通過xml來體現,而 controller層的角色一般是由activity來擔當的。雖然我們專案用到了MVP模式,但是現在人們並沒有總結出一種規範,所以MVP模式的寫法並不

Android MVCMVPMVVP的概念運用及區別

少年不識愁滋味,愛上層樓。愛上層樓,為賦新詞強說愁。 而今識盡愁滋味,欲說還休。欲說還休,卻道天涼好個秋。 一首辛棄疾的《醜奴兒·書博山道中壁》送給大家 概述 MVC、MVP和MVVM都是為了解決介面呈現和邏輯程式碼分離而出現

Android開發模式之MVCMVPMVVM的簡單介紹與區別

相信大家對MVC,MVP和MVVM都不陌生,作為三個最耳熟能詳的Android框架,它們的應用可以是非常廣泛的,但是對於一些新手來說,可能對於區分它們三個都有困難,更別說在實際的專案中應用了,有些時候想用MVP的,程式碼寫著寫著就變成了MVC,久而久之就對它們三個的選擇產生了

MVCMTV MVVM的理解總結

MVC MVC(Model View Controller 模型-檢視-控制器)是一種Web架構的模式。 特點:把業務邏輯、模型資料、使用者介面分離開來,讓開發者將資料與表現解耦。 MVC三要素: Model(資料模型)。是對客觀事物的抽象。 比如知乎Live,