3 回答

TA貢獻(xiàn)1883條經(jīng)驗(yàn) 獲得超3個(gè)贊
我認(rèn)為理解這些首字母縮略詞的最簡(jiǎn)單方法是暫時(shí)忘掉它們。相反,考慮一下它們所源自的軟件。它實(shí)際上歸結(jié)為早期網(wǎng)絡(luò)和桌面之間的差異。
第一個(gè)首字母縮寫(xiě)詞MVC起源于網(wǎng)絡(luò)。(是的,它可能曾經(jīng)存在過(guò),但網(wǎng)絡(luò)是如何向大量的Web開(kāi)發(fā)人員推廣的。)想想數(shù)據(jù)庫(kù),HTML頁(yè)面和代碼。讓我們稍微改進(jìn)一下以獲得MVC:對(duì)于?database?,讓我們假設(shè)數(shù)據(jù)庫(kù)加接口代碼。對(duì)于?HTML pages?,我們假設(shè)HTML模板和模板處理代碼。對(duì)于?code inbetween?,讓我們假設(shè)代碼將用戶(hù)點(diǎn)擊映射到可能影響數(shù)據(jù)庫(kù)的操作,肯定會(huì)導(dǎo)致顯示另一個(gè)視圖。就是這樣,至少為了這個(gè)比較的目的。
讓我們保留這個(gè)網(wǎng)絡(luò)內(nèi)容的一個(gè)特征,不像現(xiàn)在這樣,但是十年前它存在,當(dāng)時(shí)JavaScript是一個(gè)卑微,卑鄙的煩惱,真正的程序員很好地避開(kāi)了:HTML頁(yè)面本質(zhì)上是愚蠢和被動(dòng)的。瀏覽器是瘦客戶(hù)端,或者如果你愿意的話(huà),是一個(gè)糟糕的客戶(hù)端。瀏覽器中沒(méi)有智能。整頁(yè)重新加載規(guī)則。每次都會(huì)重新生成?view?。
讓我們記住,這種網(wǎng)絡(luò)方式雖然風(fēng)靡一時(shí),但與桌面相比卻是非常落后的。如果您愿意,桌面應(yīng)用程序是胖客戶(hù)端或富客戶(hù)端。(甚至像Microsoft Word這樣的程序也可以被認(rèn)為是某種客戶(hù)端,文檔的客戶(hù)端。)他們是充滿(mǎn)智慧的客戶(hù),充滿(mǎn)了關(guān)于他們數(shù)據(jù)的知識(shí)。他們是有狀態(tài)的。它們緩存了他們?cè)趦?nèi)存中處理的數(shù)據(jù)。沒(méi)有這樣的廢話(huà)作為整頁(yè)重新加載。
這種豐富的桌面方式可能是第二個(gè)縮寫(xiě)詞起源于MVVM的地方。不要被字母所愚弄,因?yàn)镃的遺漏仍然存在。他們需要。什么都沒(méi)有被刪除。我們只添加一件事:有狀態(tài),緩存在客戶(hù)端上的數(shù)據(jù)(以及處理該數(shù)據(jù)的智能)。該數(shù)據(jù),實(shí)際上是客戶(hù)端上的緩存,現(xiàn)在稱(chēng)為“ViewModel”。它允許豐富的交互性。就是這樣。
MVC =模型,控制器,視圖=基本上是單向通信=差的交互性
MVVM =模型,控制器,緩存,視圖=雙向通信=豐富的交互性
我們可以看到,使用Flash,Silverlight,以及 - 最重要的是 - JavaScript,網(wǎng)絡(luò)已經(jīng)接受了MVVM。瀏覽器不能再被合法地稱(chēng)為瘦客戶(hù)端??纯此麄兊目删幊绦浴?纯此麄兊挠洃浵?。查看現(xiàn)代網(wǎng)頁(yè)上的所有Javascript交互性。
就個(gè)人而言,我發(fā)現(xiàn)這個(gè)理論和首字母縮略詞業(yè)務(wù)通過(guò)查看它在具體現(xiàn)實(shí)中所指的內(nèi)容更容易理解。抽象概念是有用的,特別是在具體問(wèn)題上展示時(shí),所以理解可能會(huì)完整。

TA貢獻(xiàn)1839條經(jīng)驗(yàn) 獲得超15個(gè)贊
MVVM 模型 - 視圖ViewModel類(lèi)似于MVC,模型 - 視圖控制器
控制器將替換為ViewModel。ViewModel位于UI層下方。ViewModel公開(kāi)視圖所需的數(shù)據(jù)和命令對(duì)象。您可以將此視為一個(gè)容器對(duì)象,該視圖用于獲取其數(shù)據(jù)和操作。ViewModel從模型中提取數(shù)據(jù)。
Russel East做了一個(gè)博客,詳細(xì)討論了 為什么MVVM與MVC不同
- 3 回答
- 0 關(guān)注
- 1564 瀏覽
添加回答
舉報(bào)