日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

MVC與MVVM的區(qū)別與理解

作者:每天都要進(jìn)步哦 更新時(shí)間: 2022-07-18 編程語(yǔ)言

MVC

經(jīng)典MVC模式中,M是指業(yè)務(wù)模型,V是指用戶(hù)界面,C則是控制器,使用MVC的目的是將M和V的實(shí)現(xiàn)代碼分離,從而使同一個(gè)程序可以使用不同的表現(xiàn)形式。

MVC 編程模式

M(Model):模型層。是應(yīng)用程序中用于處理應(yīng)用程序數(shù)據(jù)邏輯的部分,模型對(duì)象負(fù)責(zé)在數(shù)據(jù)庫(kù)中存取數(shù)據(jù);
V(View):視圖層。是應(yīng)用程序中處理數(shù)據(jù)顯示的部分,視圖是依據(jù)模型數(shù)據(jù)創(chuàng)建的;
C(Controller):控制層。是應(yīng)用程序中處理用戶(hù)交互的部分,控制器接受用戶(hù)的輸入并調(diào)用模型和視圖去完成用戶(hù)的需求,控制器本身不輸出任何東西和做任何處理。它只是接收請(qǐng)求并決定調(diào)用哪個(gè)模型構(gòu)件去處理請(qǐng)求,然后再確定用哪個(gè)視圖來(lái)顯示返回的數(shù)據(jù)。

?MVC的優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

1.耦合性低

視圖層和業(yè)務(wù)層分離,這樣就允許更改視圖層代碼而不用重新編譯模型和控制器代碼,同樣,一個(gè)應(yīng)用的業(yè)務(wù)流程或者業(yè)務(wù)規(guī)則的改變只需要改動(dòng)MVC的模型層即可。因?yàn)槟P团c控制器和視圖相分離,所以很容易改變應(yīng)用程序的數(shù)據(jù)層和業(yè)務(wù)規(guī)則。

2.重用性高

MVC模式允許使用各種不同樣式的視圖來(lái)訪問(wèn)同一個(gè)服務(wù)器端的代碼,因?yàn)槎鄠€(gè)視圖能共享一個(gè)模型,它包括任何WEB(HTTP)瀏覽器或者無(wú)線瀏覽器(wap),比如,用戶(hù)可以通過(guò)電腦也可通過(guò)手機(jī)來(lái)訂購(gòu)某樣產(chǎn)品,雖然訂購(gòu)的方式不一樣,但處理訂購(gòu)產(chǎn)品的方式是一樣的。由于模型返回的數(shù)據(jù)沒(méi)有進(jìn)行格式化,所以同樣的構(gòu)件能被不同的界面使用。

3.部署快,生命周期成本低

MVC使開(kāi)發(fā)和維護(hù)用戶(hù)接口的技術(shù)含量降低。使用MVC模式使開(kāi)發(fā)時(shí)間得到相當(dāng)大的縮減,它使程序員(Java開(kāi)發(fā)人員)集中精力于業(yè)務(wù)邏輯,界面程序員(HTML和JSP開(kāi)發(fā)人員)集中精力于表現(xiàn)形式上。

4.可維護(hù)性高

分離視圖層和業(yè)務(wù)邏輯層也使得WEB應(yīng)用更易于維護(hù)和修改。

缺點(diǎn)

1.完全理解MVC比較復(fù)雜。

由于MVC模式提出的時(shí)間不長(zhǎng),加上同學(xué)們的實(shí)踐經(jīng)驗(yàn)不足,所以完全理解并掌握MVC不是一個(gè)很容易的過(guò)程。

2.調(diào)試?yán)щy。

因?yàn)槟P秃鸵晥D要嚴(yán)格的分離,這樣也給調(diào)試應(yīng)用程序帶來(lái)了一定的困難,每個(gè)構(gòu)件在使用之前都需要經(jīng)過(guò)徹底的測(cè)試。

3.不適合小型,中等規(guī)模的應(yīng)用程序

在一個(gè)中小型的應(yīng)用程序中,強(qiáng)制性的使用MVC進(jìn)行開(kāi)發(fā),往往會(huì)花費(fèi)大量時(shí)間,并且不能體現(xiàn)MVC的優(yōu)勢(shì),同時(shí)會(huì)使開(kāi)發(fā)變得繁瑣。

4.增加系統(tǒng)結(jié)構(gòu)和實(shí)現(xiàn)的復(fù)雜性

對(duì)于簡(jiǎn)單的界面,嚴(yán)格遵循MVC,使模型、視圖與控制器分離,會(huì)增加結(jié)構(gòu)的復(fù)雜性,并可能產(chǎn)生過(guò)多的更新操作,降低運(yùn)行效率。

5.視圖與控制器間的過(guò)于緊密的連接并且降低了視圖對(duì)模型數(shù)據(jù)的訪問(wèn)

視圖與控制器是相互分離,但卻是聯(lián)系緊密的部件,視圖沒(méi)有控制器的存在,其應(yīng)用是很有限的,反之亦然,這樣就妨礙了他們的獨(dú)立重用。

依據(jù)模型操作接口的不同,視圖可能需要多次調(diào)用才能獲得足夠的顯示數(shù)據(jù)。對(duì)未變化數(shù)據(jù)的不必要的頻繁訪問(wèn),也將損害操作性能。

MVVM

MVVM是Model-View-ViewModel的簡(jiǎn)寫(xiě)。它本質(zhì)上就是MVC 的改進(jìn)版。

MVVM包括view視圖層、model數(shù)據(jù)層、viewmodel層。采用雙向數(shù)據(jù)綁定,View的變動(dòng),自動(dòng)反映在 ViewModel,反之亦然。

MVVM 就是將其中的View 的狀態(tài)和行為抽象化,讓我們將視圖 UI 和業(yè)務(wù)邏輯分開(kāi)。其中ViewModel 就是View和Model層的粘合劑,可以取出 Model 的數(shù)據(jù)同時(shí)幫忙處理 View 中由于需要展示內(nèi)容而涉及的業(yè)務(wù)邏輯。說(shuō)白了,就是把原來(lái)ViewController層的業(yè)務(wù)邏輯和頁(yè)面邏輯等剝離出來(lái)放到ViewModel層

M(Model):模型層。就是業(yè)務(wù)邏輯相關(guān)的數(shù)據(jù)對(duì)象,通常從數(shù)據(jù)庫(kù)映射而來(lái),我們可以說(shuō)是與數(shù)據(jù)庫(kù)對(duì)應(yīng)的model。
V(View):視圖層。就是展現(xiàn)出來(lái)的用戶(hù)界面。
VM(ViewModel):視圖模型層。連接view和model的橋梁。因?yàn)?,Model層中的數(shù)據(jù)往往是不能直接跟View中的控件一一對(duì)應(yīng)上的,所以,需要再定義一個(gè)數(shù)據(jù)對(duì)象專(zhuān)門(mén)對(duì)應(yīng)view上的控件。而ViewModel的職責(zé)就是把model對(duì)象封裝成可以顯示和接受輸入的界面數(shù)據(jù)對(duì)象。

MVVM優(yōu)點(diǎn)

MVVM模式和MVC模式一樣,主要目的是分離視圖(View)和模型(Model),有幾大優(yōu)點(diǎn)

1. 低耦合。視圖(View)可以獨(dú)立于Model變化和修改,一個(gè)ViewModel可以綁定到不同的"View"上,當(dāng)View變化的時(shí)候Model可以不變,當(dāng)Model變化的時(shí)候View也可以不變。

2. 可重用性。你可以把一些視圖邏輯放在一個(gè)ViewModel里面,讓很多view重用這段視圖邏輯。

3. 獨(dú)立開(kāi)發(fā)。開(kāi)發(fā)人員可以專(zhuān)注于業(yè)務(wù)邏輯和數(shù)據(jù)的開(kāi)發(fā)(ViewModel),設(shè)計(jì)人員可以專(zhuān)注于頁(yè)面設(shè)計(jì),使用Expression Blend可以很容易設(shè)計(jì)界面并生成xaml代碼。

4. 可測(cè)試。界面素來(lái)是比較難于測(cè)試的,測(cè)試可以針對(duì)ViewModel來(lái)寫(xiě)。

MVC與MVVM的區(qū)別

在MVC里,View是可以直接訪問(wèn)Model的,所以View里會(huì)包含Model信息以及一些業(yè)務(wù)邏輯。 MVC模型關(guān)注的是Model的不變,所以在MVC模型里,Model不依賴(lài)于View,但是 View是依賴(lài)于Model的。不僅如此,因?yàn)橛幸恍I(yè)務(wù)邏輯在View里實(shí)現(xiàn)了,導(dǎo)致要更改View也是比較困難的,至少那些業(yè)務(wù)邏輯是無(wú)法重用的。

MVVM在概念上是真正將頁(yè)面與數(shù)據(jù)邏輯分離的模式,它把數(shù)據(jù)綁定工作放到一個(gè)JS里去實(shí)現(xiàn),而這個(gè)JS文件的主要功能是完成數(shù)據(jù)的綁定,即把model綁定到UI的元素上。此外MVVM另一個(gè)重要特性雙向綁定,它更方便你去同時(shí)維護(hù)頁(yè)面上都依賴(lài)于某個(gè)字段的N個(gè)區(qū)域,而不用手動(dòng)更新它們。

MVC和MVVM都是一種設(shè)計(jì)思想。 主要就是MVC中Controller演變成MVVM中的viewModel。 MVVM主要解決了MVC中大量DOM操作使頁(yè)面渲染性能降低,加載速度變慢的問(wèn)題 。

MVVM與MVC最大的區(qū)別就是:它實(shí)現(xiàn)了View和Model的自動(dòng)同步:當(dāng)Model的屬性改變時(shí),我們不用再自己手動(dòng)操作Dom元素來(lái)改變View的顯示,它會(huì)自動(dòng)變化。

原文鏈接:https://blog.csdn.net/m0_53206841/article/details/125824684

欄目分類(lèi)
最近更新