目錄
前言:
一、MVC
1.1 MVC的基本結(jié)構(gòu)
1.2 MVC的工作流程
1.3 MVC的優(yōu)缺點(diǎn)
二、MVP
2.1 MVP的基本結(jié)構(gòu)
2.2 MVP的工作流程
2.3 MVP的優(yōu)缺點(diǎn)
三、MVVM
3.1 MVVM的基本結(jié)構(gòu)
3.2 MVVM的工作流程
3.3 MVVM的優(yōu)缺點(diǎn)
前言:
MVC:一個controller對應(yīng)多個view,model可以直接通過view。從大鍋燴時代進(jìn)化,引入了分層的概念,但是層與層之間耦合明顯,維護(hù)起來不容易。
MVP:一個Presenter對應(yīng)一個view,model不能通過view。在 MVC 基礎(chǔ)上進(jìn)一步解耦,視圖層和模型層完全隔離,交互只能通過Presenter層來進(jìn)行,問題是更新視圖需要Presenter手動來進(jìn)行;
MVVM:一個ViewModel可以對應(yīng)多個View,model不能通過view??蚣芤?span style="color:#fe2c24;">雙向綁定機(jī)制,幫助實(shí)現(xiàn)一些更新視圖層和模型層的工作,讓開發(fā)者可以更專注于業(yè)務(wù)邏輯,相比于之前的模式,可以使用更少的代碼量完成更復(fù)雜的交互;
MVC、MVP、MVVM 模式是我們經(jīng)常遇到的概念,都是應(yīng)用程序的框架。其中 MVVM 是最常用到的,在實(shí)際項(xiàng)目中往往沒有嚴(yán)格按照模式的定義來設(shè)計(jì)的系統(tǒng),開發(fā)中也不一定要糾結(jié)自己用的到底是哪個模式,合適的才是最好的。
(1) MVC和MVP的區(qū)別
- MVC是允許Model和View進(jìn)行交互的,而MVP中很明顯,Model與View之間交互由Presenter完成;
- MVC中V對應(yīng)的是布局文件,MVP中V對應(yīng)的是Activity;
(2) MVVM與MVP的區(qū)別
- 它采用雙向綁定(data-binding):View的變動,自動反映在 ViewModel,反之亦然。這樣開發(fā)者就不用處理接收事件和View更新的工作,框架已經(jīng)幫你做好了。
一、MVC
1.1 MVC的基本結(jié)構(gòu)
MVC(Model-View-Controller)是桌面開發(fā)中常見的軟件架構(gòu)。
標(biāo)準(zhǔn)的MVC架構(gòu)圖如下:
MVC架構(gòu)圖:
Model(模型):外部數(shù)據(jù)庫接口
負(fù)責(zé)業(yè)務(wù)數(shù)據(jù)管理和處理,包括增刪改查。
Model必須提供外部可以操作模型數(shù)據(jù)的接口,同時在數(shù)據(jù)發(fā)生變化后能夠通知外部。
View(視圖):外部操作界面接口
用戶界面。View需要感知Model的變化,數(shù)據(jù)變化時,更新用戶界面
Controller(控制器):內(nèi)部業(yè)務(wù)邏輯
業(yè)務(wù)邏輯層。Controller需要感知View的事件,調(diào)用Model提供的接口對數(shù)據(jù)進(jìn)行操作
1.2 MVC的工作流程
1、用戶對界面進(jìn)行操作,觸發(fā)View的相關(guān)事件;
2、View感知這些事件,通知Controller進(jìn)行處理;
3、Controller處理相關(guān)業(yè)務(wù),并通過Model的接口對業(yè)務(wù)數(shù)據(jù)進(jìn)行更新;
4、Model的業(yè)務(wù)數(shù)據(jù)改變觸發(fā)相應(yīng)事件,可以直接通知View業(yè)務(wù)數(shù)據(jù)已經(jīng)發(fā)生改變;
5、View捕獲到Model發(fā)出的數(shù)據(jù)改變事件,重新獲取數(shù)據(jù)并更新用戶界面。
1.3 MVC的優(yōu)缺點(diǎn)
優(yōu)點(diǎn):復(fù)用性提升
- 降低用戶界面與業(yè)務(wù)邏輯之間的耦合性。大大降低了用戶界面和業(yè)務(wù)邏輯的耦合性,可以隔離模塊間的變化,有利于維護(hù)和擴(kuò)展。
- 復(fù)用性高。多個視圖可以共享一個數(shù)據(jù)模型。
- MVC可以將一個項(xiàng)目分為三個子項(xiàng)目(進(jìn)程或線程)分別進(jìn)行開發(fā)和管理,有利于軟件工程化,也可實(shí)現(xiàn)獨(dú)立部署。
- 因?yàn)闃I(yè)務(wù)邏輯和界面的分離,為業(yè)務(wù)模塊的單元測試創(chuàng)造了條件。
缺點(diǎn):資源消耗更多
- 不適合中小規(guī)模的軟件項(xiàng)目。MVC引入了更多概念,增加了項(xiàng)目結(jié)構(gòu)和實(shí)現(xiàn)的復(fù)雜性,將其應(yīng)用到中小規(guī)模項(xiàng)目通常得不償失。
- 更多的內(nèi)存消耗。Model中的內(nèi)容都可以從界面獲取到,因此,Model的引入增加了內(nèi)存消耗。
- 降低了程序性能。因?yàn)閷?shí)現(xiàn)的復(fù)雜性,勢必會導(dǎo)致性能降低。
二、MVP
2.1 MVP的基本結(jié)構(gòu)
MVP(Model-View-Presenter)是從MVC演變而來的。在MVC的基礎(chǔ)上,MVP強(qiáng)調(diào)Model與View之間的隔離,兩者互不感知。MVP的架構(gòu)圖如下:
MVP架構(gòu)圖
在MVP架構(gòu)中,P占據(jù)主導(dǎo)地位,充當(dāng)Model和View的橋梁,實(shí)現(xiàn)兩者之間的隔離。
2.2 MVP的工作流程
- 用戶對界面進(jìn)行操作,觸發(fā)View的相關(guān)事件;
- View感知這些事件,通知Presenter進(jìn)行處理;
- Presenter處理相關(guān)業(yè)務(wù),并通過Model的接口對業(yè)務(wù)數(shù)據(jù)進(jìn)行更新;
- Model數(shù)據(jù)變化會通知Presenter;
- Presenter收到Model數(shù)據(jù)變化通知后,調(diào)用View暴露的接口更新用戶界面。
2.3 MVP的優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
- 視圖和模型完全分離,MVC常常會因?yàn)閂和M的耦合性太強(qiáng)而漸漸導(dǎo)致C失去控制作用。
- 所有交互都在P中實(shí)現(xiàn),M的設(shè)計(jì)可以更加靈活,有利于M的高效使用。
缺點(diǎn):
- P可能會很臃腫,難以維護(hù)。
三、MVVM
3.1 MVVM的基本結(jié)構(gòu)
MVVM(Model-View-ViewModel)也是MVC的演變而來。由微軟公司提出并在WPF上大量應(yīng)用。
MVVM強(qiáng)調(diào)數(shù)據(jù)綁定,從而省去了模型數(shù)據(jù)改變后通知數(shù)據(jù)更新的步驟。
MVVM的架構(gòu)圖如下:
MVVM架構(gòu)圖
Model:業(yè)務(wù)數(shù)據(jù)處理接口
View:用戶界面。用戶界面代碼編寫時,直接將M中的業(yè)務(wù)數(shù)據(jù)以聲明方式綁定到對應(yīng)的視圖組件上。
ViewModel:核心功能有2個:
- 1)界面渲染完成后,將聲明綁定到View上的業(yè)務(wù)數(shù)據(jù)和View進(jìn)行雙向綁定,同步更新;
- 2)相應(yīng)View的事件,操縱M實(shí)現(xiàn)業(yè)務(wù)處理。
3.2 MVVM的工作流程
- 界面渲染完畢后,ViewModel會將View和Model按照開發(fā)時聲明的方式進(jìn)行雙向綁定;
- 用戶對界面進(jìn)行操作,觸發(fā)View的相關(guān)事件;
- ViewModel感知View發(fā)出的事件,調(diào)用Model的接口處理業(yè)務(wù)邏輯;
- Model內(nèi)容改變,用戶界面立即更新,無需額外操作。
3.3 MVVM的優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
- 開發(fā)效率高,產(chǎn)品開發(fā)生命周期短。通過數(shù)據(jù)雙向綁定,不需要手動更新界面,實(shí)現(xiàn)了關(guān)注點(diǎn)分離,降低了開發(fā)的復(fù)雜性和工作量;
- 雙向綁定可以通過感知模型數(shù)據(jù)的變化提前感知界面即將發(fā)生的變化,優(yōu)化該過程,可以提高界面的渲染速度,避免重復(fù)渲染。
缺點(diǎn):
- 數(shù)據(jù)綁定會消耗額外資源,占用更多的內(nèi)存
- 數(shù)據(jù)綁定會導(dǎo)致模型數(shù)據(jù)的變化變得難以追蹤
也有一些MVVM框架采用單向數(shù)據(jù)綁定+UI事件劫持的方式,這里簡單介紹下雙綁和單綁的區(qū)別:
- 一般只有UI表單控件才存在雙向數(shù)據(jù)綁定,非UI表單控件只有單向數(shù)據(jù)綁定。
- 單向數(shù)據(jù)綁定:M的變化可以自動更新到ViewModel,但ViewModel的變化需要手動更新到M(一般通過給表單控件設(shè)置事件監(jiān)聽實(shí)現(xiàn))
- 雙向數(shù)據(jù)綁定:M的變化可以自動更新到ViewModel,ViewModel的變化也可以自動更新到M
- 雙向綁定=單向綁定+UI事件監(jiān)聽,雙向和單向只不過是框架封裝程度上的差異,本質(zhì)上兩者是可以相互轉(zhuǎn)換的。
優(yōu)缺點(diǎn):文章來源:http://www.zghlxwxcb.cn/news/detail-442014.html
- 單向數(shù)據(jù)綁定的優(yōu)點(diǎn)是數(shù)據(jù)更易于跟蹤管理和維護(hù),缺點(diǎn)是代碼量較多比較啰嗦。
- 雙向數(shù)據(jù)綁定的優(yōu)點(diǎn)是代碼量少、簡潔,缺點(diǎn)是數(shù)據(jù)不易于跟蹤管理和維護(hù)。
文章來源地址http://www.zghlxwxcb.cn/news/detail-442014.html
到了這里,關(guān)于[架構(gòu)之路-195]-《軟考-系統(tǒng)分析師》- MVC、MVP、MVVM架構(gòu)各自的優(yōu)缺點(diǎn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!