MVC MVVM和單向資料流的對比

2021-08-04 06:21:57 字數 1891 閱讀 7015

今天聽了部門的高t分享的react和其他框架思想的對比,真的是受益匪淺,所以特地把高t分享的總結一下。

前端開發本質上是一種展現層開發,我思考了一下這句話,這句話用人話說就是前端開發本身就是寫介面的。但是別人能把寫介面的能總結成下面乙個迴圈,我發現這真的是能力了。如下圖,有略微的改動:

(下面就開始進入正題了。

先看下圖:

使用者操作介面

當使用者操作的檢視的時候會派發乙個事件給action

當action接受到這個事件的時候,呼叫model對應的方法

使用者操作介面

當使用者操作的檢視的時候會派發乙個事件給action

當action接受到這個事件的時候,呼叫model對應的方法

model得知view改變了,然後進行相應的操作,改變自身所儲存的資料

當model改變了,派發乙個事件給action

使用者操作介面

當使用者操作的檢視的時候會派發乙個事件給action

當action接受到這個事件的時候,呼叫model對應的方法

model得知view改變了,然後進行相應的操作,改變自身所儲存的資料

當model改變了,派發乙個事件給action

當action知道model的資料變化的時候,呼叫views中的方法

view改變自身

但是這樣是有下面兩個問題的,

- 互動增加導致view的控制**迅速膨脹,最終導致**不可維護

- model的控制**也會變多,

以至於出現下面的狀況:

雖然mvc有以上的弊端,但是因為沒有乙個好的架構思想去取代他,所以也只能用mvc了,但是隨著前端angular的橫空出世,倡導的mvvm思想也隨之深入人心,先看下圖:

view和viewmodel的資料雙向繫結

當使用者操作view的時候,viewmodel也進行物件對應的變化

這樣,我們能通過操作model來控制view的顯示,乙個頁面的比如能拆分為小功能(註冊/登陸、表單提交、***功能)這樣每個功能對應乙個model,我們就能模組化的管理model,就變為了下圖:

所以當使用者操作介面的時候,我們viewmodel就知道是哪部分發生了變化,對應的viewmodel就進行改變。

了解react的都知道,react對強大的功能就是vdom,能夠計算出最有效也是花費最小的vdom和真實dom的差異並進行改變。

下圖為mvvm的整體設計思路:

使用者操作view

dispatch view事件給狀態管理

狀態管理工具更新狀態/進行到下乙個狀態

根據新的狀態,render view

react遵從的是單向的資料流:

- 存在乙個model到react的對映關係,即view的渲染方法

- view並不知道自己對應modle哪一塊

- 於是每次model的變更,view全部更新。react的vdom演算法保證了render的高效

要解決的問題: 複雜的web互動導致view更新邏輯的**

解決思路

- mvvm:記錄model、雙向繫結,model變更時更新view對應部分

- react:實現view高效更新演算法,model變更時更新整個view

mvvm的實現是在工程上進行解決,react在解決思路(演算法)上進行解決

單向資料流

props是單向繫結的,當父元件的屬性變化時,將傳導給子元件,但是不會反過來 而且不允許子元件直接修改父元件中的資料,報錯 解決方式 方式1 如果子元件想把它作為區域性資料來使用,可以將資料存入另乙個變數中再操作,不影響父元件中的資料 方式2 如果子元件想修改資料並且同步更新到父元件,兩個方法 a....

單向資料流

doctype html html lang en head meta charset utf 8 title vue title script src bower components vue dist vue.js script head body div id box aaa aaa div ...

單向資料流

所有的 prop 都使得其父子 prop 之間形成了乙個單向下行繫結 父級 prop 的更新會向下流動到子元件中,但是反過來則不行。這樣會防止從子元件意外變更父級元件的狀態,從而導致你的應用的資料流向難以理解。額外的,每次父級元件發生變更時,子元件中所有的 prop 都將會重新整理為最新的值。這意味...