<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          架構(gòu) MVC,MVP 和 MVVM 圖示

          共 1256字,需瀏覽 3分鐘

           ·

          2020-10-28 08:00

          來自:阮一峰的網(wǎng)絡(luò)日志

          鏈接:http://www.ruanyifeng.com/blog/2015/02/mvcmvp_mvvm.html

          復(fù)雜的軟件必須有清晰合理的架構(gòu),否則無法開發(fā)和維護(hù)。


          MVC(Model-View-Controller)是最常見的軟件架構(gòu)之一,業(yè)界有著廣泛應(yīng)用。它本身很容易理解,但是要講清楚,它與衍生的 MVP 和 MVVM 架構(gòu)的區(qū)別就不容易了。


          昨天晚上,我讀了《Scaling Isomorphic Javascript Code》,突然意識(shí)到,它們的區(qū)別非常簡單。我用幾段話,就可以說清。


          (題圖:攝于瓦倫西亞,西班牙,2014年8月)


          一、MVC


          MVC模式的意思是,軟件可以分成三個(gè)部分。


          • 視圖(View):用戶界面。

          • 控制器(Controller):業(yè)務(wù)邏輯

          • 模型(Model):數(shù)據(jù)保存


          各部分之間的通信方式如下。


          1、View 傳送指令到 Controller

          2、Controller 完成業(yè)務(wù)邏輯后,要求 Model 改變狀態(tài)

          3、Model 將新的數(shù)據(jù)發(fā)送到 View,用戶得到反饋


          所有通信都是單向的。


          二、互動(dòng)模式


          接受用戶指令時(shí),MVC 可以分成兩種方式。一種是通過 View 接受指令,傳遞給 Controller。



          另一種是直接通過controller接受指令。



          三、實(shí)例:Backbone


          實(shí)際項(xiàng)目往往采用更靈活的方式,以 Backbone.js 為例。



          1.用戶可以向 View 發(fā)送指令(DOM 事件),再由 View 直接要求 Model 改變狀態(tài)。


          2.用戶也可以直接向 Controller 發(fā)送指令(改變 URL 觸發(fā) hashChange 事件),再由 Controller 發(fā)送給 View。


          3.Controller 非常薄,只起到路由的作用,而 View 非常厚,業(yè)務(wù)邏輯都部署在 View。所以,Backbone 索性取消了 Controller,只保留一個(gè) Router(路由器) 。


          四、MVP


          MVP 模式將 Controller 改名為 Presenter,同時(shí)改變了通信方向。



          1.各部分之間的通信,都是雙向的。


          2.View 與 Model 不發(fā)生聯(lián)系,都通過 Presenter 傳遞。


          3.View 非常薄,不部署任何業(yè)務(wù)邏輯,稱為"被動(dòng)視圖"(Passive View),即沒有任何主動(dòng)性,而 Presenter非常厚,所有邏輯都部署在那里。


          五、MVVM


          MVVM 模式將 Presenter 改名為 ViewModel,基本上與 MVP 模式完全一致。




          唯一的區(qū)別是,它采用雙向綁定(data-binding):View的變動(dòng),自動(dòng)反映在 ViewModel,反之亦然。Angular 和Ember 都采用這種模式。


          瀏覽 30
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美黑人视频在线 | 久久久99精品视频 | 99成人| 色丁香网站 | 青青草在线免费 |