成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

MVC MVP MVVM

Tangpj / 3500人閱讀

摘要:,的事件回調(diào)函數(shù)中調(diào)用的操作方法。以為例調(diào)用關(guān)系模式實(shí)際就是將中的改名為,調(diào)用過(guò)程基本一致,最大的改良是間的雙向綁定。和間,有一個(gè)對(duì)象,可以操作修改,使用。

參考:
MVC,MVP 和 MVVM 的圖示 - 阮一峰
http://www.ruanyifeng.com/blo...
Web開(kāi)發(fā)的MVVM模式
http://www.cnblogs.com/dxy198...
界面之下:還原真實(shí)的MV*模式
https://segmentfault.com/a/11...
Angular沉思錄(一)數(shù)據(jù)綁定
https://github.com/xufei/blog...
深入理解JavaScript系列(32):設(shè)計(jì)模式之觀察者模式
http://www.cnblogs.com/TomXu/...

MVC/MVP/MVVM 在很多博問(wèn)中都有整理,這里我根據(jù)閱讀博文和自己的理解,梳理一下 web 前端 html、css、javascript 中的他們。

1 MVC 1.1 MVC 調(diào)用關(guān)系

用戶行為輸入,View 傳遞給 Controller(在JS中通過(guò)事件監(jiān)聽(tīng)實(shí)現(xiàn));Controller 進(jìn)行應(yīng)用邏輯處理,調(diào)用 Model 暴露的接口方法操作 Model;View 與 Model 間為觀察者模式,Model 更新完數(shù)據(jù)后通知 View 更新。

JS中的觀察者模式 - 湯姆大叔博文,本文闡述了如何在JS中實(shí)現(xiàn)觀察者模式:觀察者模式中 Model 通知 View 更新,實(shí)際上是 Model 對(duì)訂閱了自己的 View 提供操作方法的調(diào)用。

1.2 經(jīng)典MVC的JS編碼理解

View,View 包含2部分:1)實(shí)現(xiàn)界面展示的 html+css;2)對(duì)外暴露的操作 View 的方法。
View -> Controller,用戶行為從視圖傳遞至控制器,有兩種方法:1)通過(guò) html 標(biāo)簽的事件屬性如 onclick;2)JS中的addEventListener(非IE)/ attachEvent(IE)方法。(如JQuery的bind和angular的ng-click等都是對(duì)原生方法的封裝,等效于上述方法)
Controller,當(dāng)視圖發(fā)生用戶行為輸入時(shí)候,會(huì)進(jìn)入控制器中的事件回調(diào)函數(shù),在回調(diào)函數(shù)中,一般會(huì)對(duì)界面數(shù)據(jù)進(jìn)行預(yù)處理(如:輸入校驗(yàn))、應(yīng)用邏輯處理(如:界面顯示Loading),然后調(diào)用對(duì)應(yīng)的 Model 方法進(jìn)行模型更新操作。
Controller -> Model,Controller 的事件回調(diào)函數(shù)中調(diào)用 Model 的操作方法。
Model,Model 可理解為一個(gè)對(duì)象,對(duì)象的屬性就是抽象的數(shù)據(jù)模型,對(duì)象的方法就是對(duì) Controller 暴露的操作方法。
Model -> View,Model 更新 View 使用觀察者模式,從JS實(shí)現(xiàn)上來(lái)說(shuō) Model 有個(gè)數(shù)組隊(duì)列中保存著訂閱(subscribe)了自己 View 的更新方法,Model 更新完畢后,遍歷并調(diào)用數(shù)組中的 View 更新方法即為發(fā)布(publish)。

OK,這就是 HTML+CSS+JS 實(shí)現(xiàn) 經(jīng)典MVC 的一個(gè)流程,下面我們說(shuō)說(shuō)它的優(yōu)缺點(diǎn)。

1.3 MVC 優(yōu)缺點(diǎn)

優(yōu)點(diǎn):
1)職責(zé)分離思想,MVC三者各司其職,模塊化;
2)觀察者模式,實(shí)現(xiàn)單個(gè)Model可更新多視圖更新。

職責(zé)分離的優(yōu)點(diǎn)不用多說(shuō),代碼清晰易維護(hù);觀察者模式實(shí)現(xiàn)單個(gè)數(shù)據(jù)模型,可同時(shí)更新多個(gè)視圖,擴(kuò)展性良好。

缺點(diǎn):
1)View依賴Model,不可避免引入業(yè)務(wù)邏輯,不易復(fù)用。

舉個(gè)栗子,model 和 view 如下:

????model 僅有 good/middle/bad 3種數(shù)據(jù),view 基于此數(shù)據(jù),需擴(kuò)展顏色、圖例描述等系列業(yè)務(wù)邏輯,經(jīng)典MVC中,view 對(duì)外暴露渲染餅圖的方法,顏色這些業(yè)務(wù)的東東就被包含進(jìn)去了,這就是我們說(shuō)的不可避免引入業(yè)務(wù)邏輯。假設(shè)現(xiàn)在有新的 model2 含3種商品數(shù)量(顏色用黃、綠、藍(lán)),要復(fù)用餅圖 view,我們很容易想到,在 view 與 model 間加一層模型轉(zhuǎn)換就能很實(shí)現(xiàn)復(fù)用,但是經(jīng)典MVC中,model 與 view 之間是觀察者模式,那么模型轉(zhuǎn)換只能放到 view 中(model 一般不變),view 得擴(kuò)展個(gè)新方法來(lái)滿足 model2。
????這個(gè)簡(jiǎn)單例子也許不能很充分說(shuō)明 View 依賴 Model 造成的問(wèn)題,但可設(shè)想如果 View 的業(yè)務(wù)邏輯和應(yīng)用功能十分復(fù)雜,那么要適配不同的Model必然造成 View 的臃腫,一定程度后便難以復(fù)用。

2 MVP

我理解,現(xiàn)在大家常提及的 MVC 實(shí)際就是 MVP,它刷新界面一般遵循 V -> P -> M -> P -> V 的步驟。(MVP 模式將 Controller 改名為 Presenter,可等同視之)

2.1 MVP調(diào)用關(guān)系

用戶行為輸入,View 傳遞給 Presenter(在JS中通過(guò)事件監(jiān)聽(tīng)實(shí)現(xiàn));Presenter 進(jìn)行應(yīng)用邏輯處理,調(diào)用 Model 暴露的接口方法操作 Model;Model 更新完數(shù)據(jù)后傳遞給 Presenter(異步 Model 操作可使用 promise,讓Presenter在回調(diào)函數(shù)中獲得最新數(shù)據(jù)),Presenter 處理最新數(shù)據(jù),調(diào)用 View 暴露的接口方法更新 View。

2.2 MVP的JS編碼理解

MVP 徹底分離了 View 與 Model,使用 HTML+CSS+JS 編碼,移除 MVC 觀察者模式,其余都很容易理解,在此不再贅述。

2.3 MVP 優(yōu)缺點(diǎn)

優(yōu)點(diǎn):
1)解決View與Model耦合問(wèn)題,使View變薄,更易復(fù)用。

請(qǐng)對(duì)應(yīng)參考上面 MVC 中的缺點(diǎn)1的例子。使用 MVP 后,Presenter 作為 View 和 Model 的中間層,那么 View 和 Model 僅需對(duì)外暴露標(biāo)準(zhǔn)接口,模型轉(zhuǎn)換的那些事兒,全部可以交給Presenter,View 層變薄,更容易復(fù)用。

缺點(diǎn):
1)Presenter 承擔(dān)了V->M和M->V的應(yīng)用和業(yè)務(wù)邏輯,容易變得臃腫,可維護(hù)性降低。

3 MVVM(以Angular1.x為例) 3.1 MVVM 調(diào)用關(guān)系

MVVM 模式實(shí)際就是將 MVP 中的 Presenter 改名為 ViewModel,調(diào)用過(guò)程基本一致,最大的改良是 ViewModel 間的雙向綁定。

3.2 雙向綁定帶來(lái)了什么

這里以實(shí)際項(xiàng)目中用過(guò)的 Angular1.x 為例,下圖僅為示意便于理解。

View 和 ViewModel 間,有一個(gè)對(duì)象 $scope,ViewModel 可以操作修改 $scope.data,View html 使用 $scope.data。當(dāng) ViewModel 設(shè)置 $scope.data=123 時(shí),Angular框架會(huì)自動(dòng)刷新 View 的顯示 123,同理當(dāng)界面有 input 這樣的入口時(shí),修改 data 時(shí),Angular框架也會(huì)自動(dòng)刷新到 $scope.data 中。
【優(yōu)點(diǎn)】View 和 ViewModel 間的數(shù)據(jù)同步功能,部分被 Angular 框架承擔(dān),部分解決了 MVP 中 Presenter 臃腫的問(wèn)題,當(dāng)然編碼也會(huì)很方便。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/87366.html

相關(guān)文章

  • MVC,MVPMVVM 模式如何選擇?

    摘要:如何同步的變更。在沒(méi)有環(huán)境下對(duì)進(jìn)行單元測(cè)試的時(shí)候,業(yè)務(wù)邏輯的正確性是無(wú)法驗(yàn)證的更新的時(shí)候,無(wú)法對(duì)的更新操作進(jìn)行斷言。對(duì)是通過(guò)接口進(jìn)行,在對(duì)進(jìn)行不依賴環(huán)境的單元測(cè)試的時(shí)候。這里根據(jù)上面的例子給出了的單元測(cè)試樣例。 前言 做客戶端開(kāi)發(fā)、前端開(kāi)發(fā)對(duì)MVC、MVP、MVVM這些名詞不了解也應(yīng)該大致聽(tīng)過(guò),都是為了解決圖形界面應(yīng)用程序復(fù)雜性管理問(wèn)題而產(chǎn)生的應(yīng)用架構(gòu)模式。 網(wǎng)上很多文章關(guān)于這方面的討...

    Worktile 評(píng)論0 收藏0
  • MVC、MVPMVVM 對(duì)比筆記

    摘要:模型與視圖解耦,編寫(xiě)單元測(cè)試更方便。切實(shí)的將模型綁定到了視圖,這一責(zé)任在中被控制器提前持有了。視圖和視圖模型使用數(shù)據(jù)綁定和事件進(jìn)行通信。觸發(fā)器數(shù)據(jù)觸發(fā)器允許我們進(jìn)一步在視圖狀態(tài)變化后改變我們的對(duì)象屬性。 MVC、MVP 和 MVVM 三個(gè)非常重要的架構(gòu)模式 MVC (Model(模型)-View(視圖)-Controller(控制器)) MVP (Model(模型)-View(視圖)...

    paney129 評(píng)論0 收藏0
  • MVC,MVP,MVVM淺析

    摘要:的模式之間不同主要是與的數(shù)據(jù)傳遞的流程不同。所以無(wú)論是復(fù)雜化簡(jiǎn)單化還是修改流程,基本都是因?yàn)榧夹g(shù)棧變化了對(duì)應(yīng)做的調(diào)整。實(shí)例實(shí)際項(xiàng)目往往采用更靈活的方式,以為例。用戶可以向發(fā)送指令事件,再由直接要求改變狀態(tài)。與不發(fā)生聯(lián)系,都通過(guò)傳遞。 概述 M -V- X 本質(zhì)都是一樣的 重點(diǎn)還是在于M-V 的橋梁要靠 X來(lái)牽線。 X的模式之間不同 主要是 M與V 的數(shù)據(jù)傳遞的流程不同。數(shù)據(jù)傳遞的流程不...

    Vultr 評(píng)論0 收藏0
  • MVC MVP MVVM

    摘要:,的事件回調(diào)函數(shù)中調(diào)用的操作方法。以為例調(diào)用關(guān)系模式實(shí)際就是將中的改名為,調(diào)用過(guò)程基本一致,最大的改良是間的雙向綁定。和間,有一個(gè)對(duì)象,可以操作修改,使用。 參考:MVC,MVP 和 MVVM 的圖示 - 阮一峰http://www.ruanyifeng.com/blo...Web開(kāi)發(fā)的MVVM模式http://www.cnblogs.com/dxy198...界面之下:還原真實(shí)的MV...

    wushuiyong 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<