人們常說的前端框架是什么

是否需要使用前端框架

一提起框架,我想我們基本都會脫口而出angular闽烙、vue蒸殿、react等等,那么它們是用來干啥的呢鸣峭?

先說下以angular宏所、backbone為代表的MV*框架和jquery的區(qū)別,像我一直在使用jquery摊溶,用得好好的爬骤,為什么要用這種框架呢?

像jquery莫换,針對界面上的DOM操作霞玄、遠(yuǎn)程請求骤铃、數(shù)據(jù)處理等都做了封裝。使用它坷剧,并不會影響自己的代碼結(jié)構(gòu)惰爬,它只能算個庫。

而框架則是提供一套解決方案惫企,你得按我的規(guī)定來安排代碼結(jié)構(gòu)撕瞧,它是隨著前端功能的增強而產(chǎn)生的,對于往應(yīng)用方向發(fā)展(也就是越來越像客戶端)的web產(chǎn)品就很必要做前端架構(gòu)這件事狞尔,它開始以模型為中心丛版,DOM操作只是附加,通過關(guān)注點分離鼓勵改進(jìn)應(yīng)用程序偏序。

未來的發(fā)展趨勢是前后端只靠json數(shù)據(jù)進(jìn)行通信页畦,后端只處理和發(fā)送一段json到前端,計算和模板渲染都在前端進(jìn)行研儒,后臺程序不再做模板的任何處理豫缨。使用MV*框架能有效實現(xiàn)前后端的解耦,簡化開發(fā)流程端朵,便于維護(hù)管理州胳,可以把精力更多放到業(yè)務(wù)邏輯,提升開發(fā)效率逸月。

所以考慮是否需要引入前端框架,可以根據(jù)產(chǎn)品類型做個基本判斷:對于頁面型產(chǎn)品遍膜,處理交互更多碗硬,jquery也夠用;但如果是應(yīng)用軟件類產(chǎn)品瓢颅,需要關(guān)注處理復(fù)雜模型恩尾,很有必要引入MV*框架。如今的互聯(lián)網(wǎng)公司的產(chǎn)品基本都是web app挽懦,越來越像傳統(tǒng)應(yīng)用軟件開發(fā)靠攏翰意,使用個框架就還是很有必要的。

前端MV*

上邊只是簡單說了結(jié)論性的話信柿,那么MV*又是什么呢冀偶?

MVC在javascript中的體現(xiàn)

view和mode之間是觀察者模式,view事先在model上注冊渔嚷,觀察model的變化进鸠,使得view可以了解model中數(shù)據(jù)的變化。

view和controller之間是策略模式形病,MVC允許在不改變視圖外觀的情況下改變視圖對用戶輸入的響應(yīng)方式客年。MVC將響應(yīng)機(jī)制封裝在controller對象中霞幅,存在著一個controller的類層次結(jié)構(gòu),使得可以方便的對原有的controller做適當(dāng)改變而創(chuàng)建新的controller量瓜。view使用controller子類的實例來實現(xiàn)一個特定的響應(yīng)策略司恳,要實現(xiàn)不同的策略只要用不同種類的controller實例替換。

view 承接controller的功能绍傲,處理用戶的輸入扔傅,依賴controller決定如何進(jìn)一步處理。由于view具有獨立處理事件的能力唧取,如果每次都走controller铅鲤,其實增加了復(fù)雜性。同時view也可委托controller處理model的更改枫弟,model數(shù)據(jù)變化后通知view進(jìn)行更新邢享,這整體是個循環(huán)的過程。

在經(jīng)典MVC中淡诗,controller要做的事情多數(shù)是派發(fā)用戶輸入給不同的view骇塘,并且在必要的時候從view中獲取用戶輸入來更改model,而Web以及絕大多數(shù)現(xiàn)在的UI系統(tǒng)中韩容,controller的職責(zé)已經(jīng)被系統(tǒng)實現(xiàn)了款违,controller非常薄,只起到路由的作用群凶,Backbone索性取消了controller插爹,只保留了router∏肷遥總之由于某種原因赠尾,控制器和視圖的分界線越來越模糊,由于controller和view之間的分界線越來越模糊毅弧,所以就衍生了MVP,MVVM這些模式气嫁。

MVP模式

MVP中view不僅擁有UI組件的結(jié)構(gòu),還擁有處理用戶事件的能力够坐,這樣就能將controller獨立出來寸宵。依賴Presenter作為核心,負(fù)責(zé)從model中拿數(shù)據(jù)元咙,填充到view中梯影。常見的MVP的實現(xiàn)是被動視圖(passive view),Presenter觀察model,不再是view觀察model庶香,一旦model發(fā)生變化光酣,就會更新view。Presenter有效地綁定了model到view脉课。view暴露了setters接口以便Presenter可以設(shè)置數(shù)據(jù)救军。對于這種被動視圖的結(jié)構(gòu)财异,沒有直接數(shù)據(jù)綁定的概念。但是他的好處是在view和model直接提供更清晰的分離唱遭。但是由于缺乏數(shù)據(jù)綁定支持戳寸,意味著不得不單獨關(guān)注某個任務(wù)。在MVP里拷泽,應(yīng)用程序的邏輯主要在Presenter來實現(xiàn)疫鹊,其中的view是很薄的一層。

MVVM模式

同MVP一樣司致,將view和model清晰的分離開來拆吆。view是對viewmodel的外在顯示,view綁定到viewmodel的屬性上脂矫,與viewmodel保持同步枣耀,如果viewmodel中的屬性值變化了,這些新值通過數(shù)據(jù)綁定會自動傳遞給view庭再。反過來viewmodel會暴露model中的數(shù)據(jù)和特定狀態(tài)給view捞奕。它的好處是實現(xiàn)了數(shù)據(jù)的雙向綁定,angular就都是使用的這種模式拄轻。

MVC颅围、MVVM與數(shù)據(jù)綁定

MVC 的思想是表示分離,將表示業(yè)務(wù)的領(lǐng)域?qū)ο驧odel和表示GUI元素的表示對象View分離恨搓。

流同步:在一個視圖的代碼中顯示地對其它視圖進(jìn)行同步院促,也就是一個視圖改變了模型,然后告訴其它所有視圖需要刷新了斧抱。

MVC中實現(xiàn)模型和視圖的解耦常拓,同時還可以使用觀察者(使得debug困難)同步策略,自動同步數(shù)據(jù)夺姑,但對于交互相關(guān)的狀態(tài),需要流同步(會增加好多代碼)掌猛。前端MVC中盏浙,controller原本負(fù)責(zé)用戶和系統(tǒng)的連接,被系統(tǒng)實現(xiàn)了很多荔茬,從而又演化出MVP废膘,但是他們沒有雙向綁定

MVVM模式中慕蔚,使用視圖模板(ViewModel)的概念來維護(hù)視圖所處的狀態(tài)丐黄。ViewModel用來存儲視圖狀態(tài)。controller負(fù)責(zé)ViewModel的初始化及根據(jù)視圖的交互操作Model孔飒。View 和 ViewModel之間進(jìn)行了數(shù)據(jù)的雙向綁定灌闺。

在前端領(lǐng)域中艰争,可以一句話總結(jié)MVC/MVVM的不同:MVC指的是前端和后臺的交互方式,MVVM指的是頁面渲染方式桂对。

當(dāng)下的前端框架

當(dāng)下的框架使用MV*的設(shè)計模式(最有優(yōu)勢的是MVVC)甩卓,它們還集合了模板、模塊化蕉斜、組件化的功能逾柿,而且更重要的就是為了實現(xiàn)組件化。這兩年前端領(lǐng)域有三個框架/庫引領(lǐng)時尚宅此,那就是Angular机错,Polymer(google提出,web component)父腕,React弱匪。(vue在國內(nèi)使用的公司還是蠻多的,像百度外賣侣诵、餓了么痢法、頭條等等),這里有篇文章杜顺,詳細(xì)分析了這幾個前端框架财搁,2015前端框架何去何從

這三個東西各有千秋躬络,在可以預(yù)見的幾年內(nèi)將會鼎足三分尖奔,也許還會有新的框架出現(xiàn),能不能比這幾個流行就難說了穷当。

對于前端框架我們需要關(guān)注:
模塊化
web component
變更檢測(雙向綁定機(jī)制)
immutable Data
promise與異步
這幾個方面再留待后邊學(xué)習(xí)

參考資料

http://blog.sae.sina.com.cn/archives/1060
https://github.com/xufei/blog/issues/19
http://efe.baidu.com/blog/mvc-deformation/
http://www.cnblogs.com/sskyy/p/4264371.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末提茁,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子馁菜,更是在濱河造成了極大的恐慌茴扁,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件汪疮,死亡現(xiàn)場離奇詭異峭火,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)智嚷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門卖丸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人盏道,你說我怎么就攤上這事稍浆。” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵衅枫,是天一觀的道長嫁艇。 經(jīng)常有香客問我,道長为鳄,這世上最難降的妖魔是什么裳仆? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮孤钦,結(jié)果婚禮上歧斟,老公的妹妹穿的比我還像新娘。我一直安慰自己偏形,他們只是感情好静袖,可當(dāng)我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著俊扭,像睡著了一般队橙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上萨惑,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天捐康,我揣著相機(jī)與錄音,去河邊找鬼庸蔼。 笑死解总,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的姐仅。 我是一名探鬼主播花枫,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼掏膏!你這毒婦竟也來了劳翰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤馒疹,失蹤者是張志新(化名)和其女友劉穎佳簸,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體颖变,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡生均,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了悼做。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片疯特。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡哗魂,死狀恐怖肛走,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情录别,我是刑警寧澤朽色,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布邻吞,位于F島的核電站,受9級特大地震影響葫男,放射性物質(zhì)發(fā)生泄漏抱冷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一梢褐、第九天 我趴在偏房一處隱蔽的房頂上張望旺遮。 院中可真熱鬧,春花似錦盈咳、人聲如沸耿眉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鸣剪。三九已至,卻和暖如春丈积,著一層夾襖步出監(jiān)牢的瞬間筐骇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工江滨, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留铛纬,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓牙寞,卻偏偏與公主長得像饺鹃,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子间雀,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,786評論 2 345

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