了解前端 MVVM 模式

什么是 MVVM

MVVM(Model-View-ViewModel)是一種軟件架構(gòu)設(shè)計模式疯特,由微軟 WPF(用于替代 WinForm楞抡,以前就是用這個技術(shù)開發(fā)桌面應(yīng)用程序的)和 Silverlight(類似于 Java Applet,簡單點說就是在瀏覽器上運行的 WPF) 的架構(gòu)師 Ken Cooper 和 Ted Peters 開發(fā)蛤肌,是一種簡化用戶界面的事件驅(qū)動編程方式酷誓。由 John Gossman(同樣也是 WPF 和 Silverlight 的架構(gòu)師)于 2005 年在他的博客上發(fā)表造锅。

MVVM 源自于經(jīng)典的 MVC(Model-View-Controller)模式(期間還演化出了 MVP(Model-View-Presenter) 模式)仙畦。MVVM 的核心是 ViewModel 層输涕,負責(zé)轉(zhuǎn)換 Model 中的數(shù)據(jù)對象來讓數(shù)據(jù)變得更容易管理和使用,其作用如下:

  • 該層向上與視圖層進行雙向數(shù)據(jù)綁定
  • 向下與 Model 層通過接口請求進行數(shù)據(jù)交互
image

MVVM 已經(jīng)相當(dāng)成熟了慨畸,主要運用但不僅僅在網(wǎng)絡(luò)應(yīng)用程序開發(fā)中莱坎。當(dāng)下流行的 MVVM 框架有 Vue.jsAngularJS 等寸士。

為什么要使用 MVVM

MVVM 模式和 MVC 模式一樣檐什,主要目的是分離視圖(View)和模型(Model),有幾大好處

  • 低耦合: 視圖(View)可以獨立于 Model 變化和修改弱卡,一個 ViewModel 可以綁定到不同的 View 上乃正,當(dāng) View 變化的時候 Model 可以不變,當(dāng) Model 變化的時候 View 也可以不變婶博。
  • 可復(fù)用: 你可以把一些視圖邏輯放在一個 ViewModel 里面瓮具,讓很多 View 重用這段視圖邏輯。
  • 獨立開發(fā): 開發(fā)人員可以專注于業(yè)務(wù)邏輯和數(shù)據(jù)的開發(fā)(ViewModel)凡人,設(shè)計人員可以專注于頁面設(shè)計名党。
  • 可測試: 界面素來是比較難于測試的,而現(xiàn)在測試可以針對 ViewModel 來寫划栓。

MVVM 的組成部分

image
View

View 是視圖層兑巾,也就是用戶界面。前端主要由 HTML 和 CSS 來構(gòu)建忠荞,為了更方便地展現(xiàn) ViewModel 或者 Model 層的數(shù)據(jù)蒋歌,已經(jīng)產(chǎn)生了各種各樣的前后端模板語言,比如 FreeMarker委煤、Thymeleaf 等等堂油,各大 MVVM 框架如 Vue.jsAngularJS碧绞,EJS 等也都有自己用來構(gòu)建用戶界面的內(nèi)置模板語言府框。

Model

Model 是指數(shù)據(jù)模型,泛指后端進行的各種業(yè)務(wù)邏輯處理和數(shù)據(jù)操控讥邻,主要圍繞數(shù)據(jù)庫系統(tǒng)展開迫靖。這里的難點主要在于需要和前端約定統(tǒng)一的 接口規(guī)則

ViewModel

ViewModel 是由前端開發(fā)人員組織生成和維護的視圖數(shù)據(jù)層。在這一層兴使,前端開發(fā)者對從后端獲取的 Model 數(shù)據(jù)進行轉(zhuǎn)換處理系宜,做二次封裝,以生成符合 View 層使用預(yù)期的視圖數(shù)據(jù)模型发魄。

需要注意的是 ViewModel 所封裝出來的數(shù)據(jù)模型包括視圖的狀態(tài)和行為兩部分盹牧,而 Model 層的數(shù)據(jù)模型是只包含狀態(tài)的

  • 比如頁面的這一塊展示什么俩垃,那一塊展示什么這些都屬于視圖狀態(tài)(展示)
  • 頁面加載進來時發(fā)生什么,點擊這一塊發(fā)生什么汰寓,這一塊滾動時發(fā)生什么這些都屬于視圖行為(交互)

視圖狀態(tài)和行為都封裝在了 ViewModel 里口柳。這樣的封裝使得 ViewModel 可以完整地去描述 View 層`。由于實現(xiàn)了雙向綁定有滑,ViewModel 的內(nèi)容會實時展現(xiàn)在 View 層跃闹,這是激動人心的,因為前端開發(fā)者再也不必低效又麻煩地通過操縱 DOM 去更新視圖俺孙。

MVVM 框架已經(jīng)把最臟最累的一塊做好了辣卒,我們開發(fā)者只需要處理和維護 ViewModel掷贾,更新數(shù)據(jù)視圖就會自動得到相應(yīng)更新睛榄,真正實現(xiàn) 事件驅(qū)動編程

View 層展現(xiàn)的不是 Model 層的數(shù)據(jù)想帅,而是 ViewModel 的數(shù)據(jù)场靴,由 ViewModel 負責(zé)與 Model 層交互,這就完全解耦了 View 層和 Model 層港准,這個解耦是至關(guān)重要的旨剥,它是前后端分離方案實施的重要一環(huán)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末浅缸,一起剝皮案震驚了整個濱河市轨帜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌衩椒,老刑警劉巖蚌父,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異毛萌,居然都是意外死亡苟弛,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門阁将,熙熙樓的掌柜王于貴愁眉苦臉地迎上來膏秫,“玉大人,你說我怎么就攤上這事做盅$拖鳎” “怎么了?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵吹榴,是天一觀的道長亭敢。 經(jīng)常有香客問我,道長腊尚,這世上最難降的妖魔是什么吨拗? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上劝篷,老公的妹妹穿的比我還像新娘哨鸭。我一直安慰自己,他們只是感情好娇妓,可當(dāng)我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布像鸡。 她就那樣靜靜地躺著,像睡著了一般哈恰。 火紅的嫁衣襯著肌膚如雪只估。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天着绷,我揣著相機與錄音蛔钙,去河邊找鬼。 笑死荠医,一個胖子當(dāng)著我的面吹牛吁脱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播彬向,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼兼贡,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了娃胆?” 一聲冷哼從身側(cè)響起遍希,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎里烦,沒想到半個月后凿蒜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了卤档。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片梳凛。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤氮发,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站冗懦,受9級特大地震影響爽冕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜披蕉,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一颈畸、第九天 我趴在偏房一處隱蔽的房頂上張望乌奇。 院中可真熱鬧,春花似錦眯娱、人聲如沸礁苗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽试伙。三九已至,卻和暖如春于样,著一層夾襖步出監(jiān)牢的瞬間疏叨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工穿剖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蚤蔓,地道東北人。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓携御,卻偏偏與公主長得像昌粤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子啄刹,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容