亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

淺談JavaScript前端開發(fā)的MVC結(jié)構(gòu)與MVVM結(jié)構(gòu)

 更新時間:2016年06月03日 15:47:43   作者:slalx  
以AngularJS為代表的MVVM結(jié)構(gòu)框架或庫這兩年來在前端界真是火到不行,大有對抗傳統(tǒng)jQuery綁定思想的趨勢,這里我們結(jié)合傳統(tǒng)的MVC結(jié)構(gòu),來淺談JavaScript前端開發(fā)的MVC結(jié)構(gòu)與MVVM結(jié)構(gòu)

MVC
Model–View–Controller (MVC)是一種把信息展現(xiàn)邏輯和用戶交互分離的計(jì)算機(jī)用戶界面開發(fā)模式;Model包含應(yīng)用的數(shù)據(jù)和業(yè)務(wù)邏輯;Controller負(fù)責(zé)把用戶的輸入,轉(zhuǎn)換為命令傳遞給Model和View;這是維基百科的解釋;
這種模式最初是由Trygve Reenskaug在使用Smalltalk-80(1979)工作時設(shè)計(jì)的,剛開始叫做Model-View-Controller-Editor;后來通過《Design Patterns: Elements of Reusable Object-Oriented Software》這本書的深入介紹,才使得mvc徹底流行開來;
理解組成MVC三部分的職責(zé),以及現(xiàn)有的這些javascript框架為我們提供了什么,才能夠使我們更好的使用這些框架。下面我們先通關(guān)過組成MVC的三個部分來學(xué)習(xí)下每部分的職責(zé)是什么【以backbone為例給出示范代碼】。
Model
Model管理應(yīng)用的數(shù)據(jù)。當(dāng)model數(shù)據(jù)發(fā)生改變的時候,會通知它的監(jiān)聽者【可能是view】,收到通知后,監(jiān)聽者會做相應(yīng)的變化。

201663153716274.png (766×534)

View
View是當(dāng)前狀態(tài)的model的視覺展現(xiàn),view會觀察模型的變化,當(dāng)模型改變的時候被通知,同時允許view來更新自己。一般情況下我們會在view中使用模版引擎渲染model;

201663153933502.jpg (865×1116)

Controllers
Controllers是位于models和views的之間的調(diào)解人,它的工作是當(dāng)model改變時來更新view和當(dāng)用戶操作view時來更新Model。

201663153953337.jpg (688×267)

javascipt mvc框架對比
不同的人對比方法不一樣,關(guān)鍵看你關(guān)注什么什么地方:
1.如果你比較關(guān)注框架的URL路由,數(shù)據(jù)存儲,視圖實(shí)現(xiàn)等細(xì)節(jié),可以重點(diǎn)關(guān)注這里,javascript寶座:框架論劍;
2.如果你比較關(guān)注框架的具體實(shí)例,這里有一個開源項(xiàng)目是專門對同一個demo采用不同的javascript mvc框架實(shí)現(xiàn),可以非常明確定的看出每種框架在具體應(yīng)用上的差別,具體 實(shí)現(xiàn)在這里,TodoMVC官方站點(diǎn)
MVC給我們帶來的好處:
1.易于維護(hù)
2.模型視圖的解耦,意味著可以對業(yè)務(wù)邏輯更好的進(jìn)行單元測試
3.代碼能夠更好的重用
4.模塊化的開發(fā)能夠使分工更加明確,一部分人專注業(yè)務(wù)邏輯,一部分人專注用戶界面。
5.回顧了經(jīng)典的mvc模型,我們明白了應(yīng)用中分層的概念以及每層的職責(zé),同時也應(yīng)該能夠鑒別所有的javascript mvc框架與我們所解釋的經(jīng)典的mvc模型有什么差別。這樣的話我們在選擇mvc框架時就應(yīng)該應(yīng)該重點(diǎn)關(guān)注models,views,controller具體怎么實(shí)現(xiàn)的,甚至于具體代碼怎么實(shí)現(xiàn),才能夠幫助我們更好的選擇最適用與我們的javascript mvc框架。 

MVVM
MVVM的全稱是Model View ViewModel,這種架構(gòu)模式最初是由微軟的MartinFowler作為微軟軟件的展現(xiàn)層設(shè)計(jì)模式的規(guī)范提出,它是MVC模式的衍生物,MVVM模式的關(guān)注點(diǎn)在能夠支持事件驅(qū)動的UI開發(fā)平臺,例如HTML5,[2][3] WindowsPresentation Foundation (WPF), Silverlight 和 t ZK framework,Adobe Flex。
對這種模式的實(shí)現(xiàn),大部分都是通過在view層聲明數(shù)據(jù)綁定來和其他層分離的,這樣就方便了前端開發(fā)人員和后端開發(fā)人員 的分工,前端開發(fā)人員在html標(biāo)簽中寫對viewmodel的綁定數(shù)據(jù),model和viewmodel是后端開發(fā)人員通過開發(fā)應(yīng)用的邏輯來維護(hù)這兩層。
最近幾年,mvvm模式在javascript中開始有人實(shí)現(xiàn),目前比較成熟的框架有KnockoutJS, Kendo MVVM和Knockback.js,下面我們就以KnockoutJS為例看下MVVM模式中個部分的具體職責(zé)和實(shí)例代碼,同時理解使用這種模式開發(fā)的優(yōu)點(diǎn)和缺點(diǎn)。
Model
同其他的mv*家族成員一樣,Model代表特定領(lǐng)域的數(shù)據(jù)或者應(yīng)用所需的數(shù)據(jù),一個典型的特定領(lǐng)域的數(shù)據(jù)如用戶信息【用戶名,頭像,email,電話】,或者一首音樂的信息【歌曲名,發(fā)行年份,專輯】;
Model僅僅關(guān)注數(shù)據(jù)信息,不關(guān)心任何行為;她不格式化數(shù)據(jù)或者影響數(shù)據(jù)在瀏覽器中的展現(xiàn),這些不是他的職責(zé);格式化數(shù)據(jù)是view層的任務(wù),同時業(yè)務(wù)邏輯層被封裝在viewmodel中,用來和model進(jìn)行交互。
在Model層做的一個比較意外的行為是對數(shù)據(jù)的驗(yàn)證,比如當(dāng)用戶輸入email的時候,判斷email的格式是否正確。
在KnockoutJS中,Model基本是按照上面的定義來實(shí)現(xiàn)的,但是會有通過ajax調(diào)用服務(wù)器服務(wù)來進(jìn)行讀寫Model數(shù)據(jù)。  

201663154020151.png (655×182)

View
View是指應(yīng)用中和用戶直接交互的部分,他是一個交互式的UI來表示ViewModel的狀態(tài),View被認(rèn)為是主動的,而不是被動的?這句話的意思是說被動的View在應(yīng)用中不關(guān)心model的領(lǐng)域,model的領(lǐng)域在controller中維護(hù);MVVM的主動式的View包含數(shù)據(jù)綁定,事件和需要理解model和viewmodel的行為,盡管這些行為可以和屬性對應(yīng),view仍然需要響應(yīng)viewmodel的事件,同時View不負(fù)責(zé)控制狀態(tài)。
KnockoutJS的view層就是一個簡單的html文檔,它里面會有關(guān)聯(lián)到viewmodel的數(shù)據(jù)聲明,同時KnockoutJS的view層顯示從ViewModel中獲取的數(shù)據(jù),傳遞命令給viewmodel,并且更新viewmodel改變的狀態(tài)。

201663154048791.jpg (750×200)
ViewModel
可以認(rèn)為ViewModel是一個專門用于數(shù)據(jù)轉(zhuǎn)換的Controller,它可以把Model中的信息轉(zhuǎn)換為View中的信息,同時從View專遞命令給Model;
從這個意義上來說,ViewModel看上去更像一個Model,但是它控制著View的很多顯示邏輯,同時ViewModel也暴漏一些方法用來維護(hù)view的狀態(tài),根據(jù)View的行為和事件來更新model;
綜上,ViewModel位于UI層的后面,暴漏數(shù)據(jù)給View,可以認(rèn)為是View層的數(shù)據(jù)和行為的源;
KnockoutJS把ViewModel解釋為數(shù)據(jù)的展現(xiàn)和表現(xiàn)在UI上的行為,他不是ui需要持久化的數(shù)據(jù)模型,但是他可以持有用戶存儲的數(shù)據(jù);Knockout的 ViewModels是采用javascript對象實(shí)現(xiàn)的,不用關(guān)心html標(biāo)簽,這種抽象的方法可以使它們的實(shí)現(xiàn)保持簡單。

201663154147956.jpg (865×524)

優(yōu)點(diǎn):
1.MVVM使并行開發(fā)更加容易,使前端開發(fā)和后端開發(fā)人員互不影響。
2.抽象化View層,減少了代碼中的業(yè)務(wù)邏輯
3.ViewModel比事件驅(qū)動更容易測試
4.ViewModel的測試不用關(guān)心uI的自動化和交互
缺點(diǎn):
1.對于簡單的ui,使用MVVM有點(diǎn)太重
2.聲明式的數(shù)據(jù)綁定不利于調(diào)試,因?yàn)槊钍降拇a可以和容易的設(shè)置斷點(diǎn),這種模式就不利于設(shè)置這樣的斷點(diǎn)
3.在不挑剔(non-trivial)的應(yīng)用里數(shù)據(jù)綁定可以創(chuàng)建大量的簿記(book-keeping)。你也不想結(jié)束于綁定比被綁定的對象更復(fù)雜的情況。
4.在大的應(yīng)用中,在獲取大量的概要(generalization)前很難設(shè)計(jì)視圖-模型層

相關(guān)文章

最新評論