這篇文章將為大家詳細講解有關(guān)前端MV*框架的意義是什么,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。
成都創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)十年堅持,服務(wù)企業(yè)網(wǎng)站設(shè)計、響應(yīng)式網(wǎng)站設(shè)計等網(wǎng)站建設(shè)服務(wù)。成百上千企業(yè)的合作經(jīng)驗,幫助我們?yōu)榉?wù)企業(yè)不斷提升價值。為企業(yè)建設(shè)開發(fā)網(wǎng)站和維護,主推個性化定制型網(wǎng)站設(shè)計
經(jīng)常有人質(zhì)疑,在前端搞MV*有什么意義?也有人提出這樣的疑問:以AngularJS,Knockout,BackBone為代表的MV*框架,它跟jQuery這樣的框架有什么區(qū)別?我jQuery用得好好的,有什么必要再引入這種框架?
回答這些問題之前,先要理清一些歷史,前端從什么時候開始有框架的?
早期前端都是比較簡單,基本以頁面為工作單元,內(nèi)容以瀏覽型為主,也偶爾有簡單的表單操作,這個時期每個界面上只有很少的JavaScript邏 輯,基本不太需要框架。隨著AJAX的出現(xiàn),Web2.0的興起,人們可以在頁面上可以做比較復(fù)雜的事情了,然后前端框架才真正出現(xiàn)了,以jQuery為 代表,針對界面上常見的DOM操作,遠程請求,數(shù)據(jù)處理等作了封裝,也有專注于處理數(shù)據(jù)的Underscore,嚴格來說,這些都不能算框架,而是算庫。
庫和框架是有一些區(qū)別的:庫是一種工具,我提供了,你可以不用,即使你用了,也沒影響你自己的代碼結(jié)構(gòu)??蚣軇t是面向一個領(lǐng)域,提供一套解決方案, 如果你用我,就得按照我的方式辦事。按照這個定義,jQuery和Underscore都只能算是庫,ExtJS和dojo算框架。
MV*框架又是為什么興起的呢?它的出現(xiàn),伴隨著一些Web產(chǎn)品逐漸往應(yīng)用方向發(fā)展,遇到了在C/S領(lǐng)域相同的問題:由于前端功能的增強、代碼的膨脹,導(dǎo)致不得不做“前端的架構(gòu)”這個事情了。
很多做后端開發(fā)的人對前端架構(gòu)很不屑,認為前端只是很薄的一層?xùn)|西,做架構(gòu)干什么?什么,不但要搞架構(gòu),還要搞MVC?Java Struts的MVC中,整個前端都只能算是View而已,你還要在這個View里面劃分模型和控制器等其他東西?他們中的多數(shù)對這個很不屑,但Web前 端隨著復(fù)雜度的增加,很多地方跟客戶端已經(jīng)沒有本質(zhì)區(qū)別了。
jQuery的思維方式是:以DOM操作為中心
MV*框架的思維方式是:以模型為中心,DOM操作只是附加
所以回到那個問題上,jQuery滿足了你的業(yè)務(wù)需要,你還有什么必要引入MV*框架?
這個是要看產(chǎn)品類型的,如果是頁面型產(chǎn)品,多數(shù)確實不太需要它,因為頁面中的JavaScript代碼,處理交互的絕對遠遠超過處理模型的,但是如果是應(yīng)用軟件類產(chǎn)品,這就太需要了。
長期做某個行業(yè)軟件的公司,一般都會沉淀下來一些業(yè)務(wù)組件,主要體現(xiàn)在數(shù)據(jù)模型、業(yè)務(wù)規(guī)則和業(yè)務(wù)流程,這些組件基本都存在于后端,在前端很少有相應(yīng) 的組織。在以往的經(jīng)驗里,他們是有做MVC的,也嘗試做了一些界面組件,但做法比較過時,比如說使用JSF或者GWT這樣的方式。
JSF的問題是什么?它的問題并不在于界面跟邏輯混合,所謂的縱向切分組件,Polymer這種純前端框架也是這么切分的,它問題在于組件的生成和 渲染不在同一個地方。所以,邏輯代碼的位置很尷尬,如果這個界面簡單還好說,復(fù)雜起來就很麻煩了,就是很多明明是前端邏輯代碼,卻需要通過后端去生成。
GWT這種方式相對要好一些,它的問題是留給UI調(diào)節(jié)的余地太小了,比較缺乏靈活性。
這類基于某種服務(wù)端技術(shù)的組件化方式有一些局限性,比如它較大程度限制了前端的發(fā)揮,在早一些的時候,這種方式可能還不錯,但是現(xiàn)在隨著時代發(fā)展, 用戶對前端用戶體驗要求越來越高,需要我們把很大一部分精力繼續(xù)放回前端來。JSF等方案的另外一個問題是綁定了某種服務(wù)端環(huán)境,很難切換到另外一種后端 上,如果碰上要用Hybird方式開發(fā),想復(fù)用一些前端邏輯,幾乎毫無可能。
那么,我們看看純前端的框架,看看都是怎么解決這些問題的。以Google為例,它推出了兩個框架,Polymer和Angular,而且處于并行發(fā)展的階段,這兩者理念還有不小的差別,給不少人帶來了困惑。
Polymer切分組件的方式有點類似JSF,它跟HTML5標準中的Shadow DOM和Element有很大聯(lián)系,這種切分組件的方式非常直觀,每個組件都是端到端的,包含UI和邏輯,直接放置到某個界面上就能用,這種方式很容易被 業(yè)務(wù)開發(fā)人員接受,但里面的時序比較難處理。
比如說,有兩個組件,里面各包含一個下拉框,有數(shù)據(jù)的聯(lián)動關(guān)系,因為它們處在兩個不同的組件里,聯(lián)動的處理代碼就很難寫,考慮到組件的特點,要盡量 隱藏自己的內(nèi)部實現(xiàn),所以從外部獲取組件內(nèi)部的某個元素要繞一層,而組件不能依賴其他外部的東西,所以到***只有通過事件去實現(xiàn),這個聯(lián)動代碼寫好了應(yīng)當 放在哪里,也是個大問題。我們的例子僅僅是這么簡單,就要繞這么個大圈子才能保證時序,如果場景比較復(fù)雜,非常難以控制。
如果同樣的組件在某個界面被復(fù)用多次,數(shù)據(jù)的一致性也很難保證,設(shè)想一下某個界面存在兩個一樣的下拉框,分別處于不同組件中,兩者的數(shù)據(jù)都需要分別 去加載,這個過程是有浪費的,更嚴重的是,如果這個下拉框?qū)?yīng)的數(shù)據(jù)有更新,很難把每個實例都更新一遍,這個處理過程是非常麻煩的。
Angular框架處理問題的方式跟它有所不同,它是水平分層,所有這些數(shù)據(jù)訪問邏輯都跟UI徹底分離,所以可以很輕松地把這個邏輯代碼寫出來,這么一來,前面所述端到端的組件就徹底退化,變成只有界面展現(xiàn)了。
看看剛才碰到的兩個問題,***個,模型代碼按照業(yè)務(wù)領(lǐng)域進行劃分,獲取的數(shù)據(jù)放在兩個不同的數(shù)組,然后通過雙向綁定跟UI產(chǎn)生關(guān)聯(lián),如果UI上一個 下拉框選中項發(fā)生變更,只需要監(jiān)控這個取值項,然后更新另一個下拉框的取值列表即可,完全不需要繞彎子。即使這兩個處于不同模型中,也可以用類似后端的方 式,采用事件總線等機制去完成通信。
第二個更簡單了,復(fù)用的組件其實只有UI,也就是說,只有UI是多實例的,模型其實只有一份,比如說一個地區(qū)的樹形結(jié)構(gòu),即使一個界面上同時有維護 和使用兩種功能,都可以共享同一份模型,當維護這邊對數(shù)據(jù)進行了更新,就實時反饋到模型中,然后由雙向綁定再把這個模型同步到界面上的使用方去,整個過程 清晰可控。
從協(xié)作關(guān)系上講,很多前端開發(fā)團隊每個成員的職責不是很清晰,有了前端的MV*框架,這個狀況會大有改觀。MV*框架的理念是把前端按照職責分層,每一層都相對比較獨立,有自己的價值,也有各自發(fā)揮的余地。
為什么多數(shù)做互聯(lián)網(wǎng)前端開發(fā)的同學們感受不到MV*框架的重要性呢,因為在這個協(xié)作體系里,Model的這一塊不夠復(fù)雜,在傳統(tǒng)軟件領(lǐng) 域,Model的部分是代碼最多的,View的相對少一些,而互聯(lián)網(wǎng)領(lǐng)域里,基本是相反的,所以Model這塊淪為附加,如果主要在操作View和 Controller,那當然jQuery這類框架比較好用了。
所以,經(jīng)??吹接谢ヂ?lián)網(wǎng)產(chǎn)品的同學們講前端MVC,但舉例的時候,都比較牽強,很多時候,他們舉出來的那個Model,其實都不能算真正的Model,而是在操作View的過程中一些輔助的模型,真正的Model是貫穿前后端的。
歸根結(jié)底,前端MV*框架帶來的是一整套工作流程的變更,后端工程師也可以編寫前端的模型代碼,把它跟后端徹底打通,交互工程師處理UI跟模型的互 動關(guān)系,UI工作人員可以專注、無障礙地處理HTML源碼,把它們以界面模版的形式提供給交互工程師。這一整套協(xié)作機制能夠大大提高B/S架構(gòu)系統(tǒng)的開發(fā) 效率,如果再有外圍的管控平臺,生產(chǎn)效率將真正踏進工業(yè)化的階段。
到這個階段,前端開發(fā)人員的出路是什么呢?我認為有兩種。拿服裝行業(yè)來對比,如果你要的是普通的,就使用工業(yè)手段批量生產(chǎn),使用MV*框架,做好架 構(gòu)和組件重用,做得快,細節(jié)不是很講究。如果你想要更好的,有特色的,就需要名家設(shè)計,手工打造,非常精巧,高端大氣上檔次。所以,這也就代表著前端開發(fā) 的兩種發(fā)展方向。
關(guān)于前端MV*框架的意義是什么就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。