為什么會(huì)出現(xiàn) MVVM 呢?
我接觸MVVM 是在2015年,可以說(shuō)2015年是MVVM 最火熱的一年,而在這之前,我所知道的就是MVC, MVC 大約是在5年前,也就是2011年的時(shí)候接觸的,那時(shí)候剛學(xué)編程語(yǔ)言,學(xué)的是Java,而Java 中的經(jīng)典的 SSH 框架就用來(lái)構(gòu)建一個(gè)標(biāo)準(zhǔn)的MVC 架構(gòu)。說(shuō)實(shí)話(huà),MVC 架構(gòu)用了這么多年,但始終沒(méi)有很深刻的理解,只停留在用的層面, 一直到接觸 Vue.js 之后,研究了MVVM 架構(gòu)思想,然后再回頭看 MVC ,才有一種豁然開(kāi)朗的感覺(jué)~
MVC 即 Model-View-Controller 的縮寫(xiě),就是 模型-視圖-控制器 , 也就是說(shuō)一個(gè)標(biāo)準(zhǔn)的Web 應(yīng)用程式是由這三部分組成的:
View 用來(lái)把數(shù)據(jù)以某種方式呈現(xiàn)給用戶(hù)
Model 其實(shí)就是數(shù)據(jù)
Controller 接收并處理來(lái)自用戶(hù)的請(qǐng)求,并將 Model 返回給用戶(hù)
在HTML5 還未火起來(lái)的那些年,MVC 做為Web 應(yīng)用的最佳實(shí)踐是OK的,這是因?yàn)?Web 應(yīng)用的View 層相對(duì)來(lái)說(shuō)比較簡(jiǎn)單,前端所需要的數(shù)據(jù)在后端基本上都可以處理好,View 層主要是做一下展示,那時(shí)候提倡的是 Controller 來(lái)處理復(fù)雜的業(yè)務(wù)邏輯,所以View 層相對(duì)來(lái)說(shuō)比較輕量,就是所謂的 瘦客戶(hù)端 思想。
2010年到2011年,HTML5概念被熱炒,受到追捧,2012年,W3C 正式宣布HTML5規(guī)范已經(jīng)正式定稿。2013年我剛進(jìn)公司就接觸到了一個(gè) HTML5 框架 Sench touch, Sench touch 是一款用來(lái)構(gòu)建移動(dòng)應(yīng)用的HTML5 框架,它將前后端徹底分離,前端采用的是MVC 架構(gòu),作為一個(gè)獨(dú)立的項(xiàng)目工程來(lái)維護(hù)。
為什么前端要工程化,要是使用MVC?
相對(duì) HTML4 ,HTML5 最大的亮點(diǎn)是它為移動(dòng)設(shè)備提供了一些非常有用的功能,使得 HTML5 具備了開(kāi)發(fā)App的能力, HTML5開(kāi)發(fā)App 最大的好處就是跨平臺(tái)、快速迭代和上線(xiàn),節(jié)省人力成本和提交效率,因此很多企業(yè)開(kāi)始對(duì)傳統(tǒng)的App進(jìn)行改造,逐漸用H5代替Native頁(yè)面,到2015年的時(shí)候,市面上很多App 或多或少嵌入都了H5頁(yè)面。
既然要用H5來(lái)構(gòu)建 App, 那View 層所做的事,就不僅僅是簡(jiǎn)單的數(shù)據(jù)展示了,要管理數(shù)據(jù),管理用戶(hù)操作的各種狀態(tài),還要處理移動(dòng)設(shè)備上用戶(hù)各種操作行為等等。因此,前端也需要一個(gè)類(lèi)似于MVC的框架來(lái)管理這些復(fù)雜的邏輯,使開(kāi)發(fā)更加高效。 但此時(shí)的 MVC 又稍微發(fā)了點(diǎn)變化: