天天看點

MVVM、MVC及MVP

1.MVVM

        MVC是Mode-View-ViewModel,模型指的是後端傳遞的資料,視圖是所看到的頁頁面、視圖模型是MVVM模式核心,它是連接配接View和Model的核心,它是連接配接View和Model的橋梁,它有兩個方向:一是将模型轉化成視圖,即将後端傳遞的資料轉化成所看到了頁面,實作的方式是:資料綁定;二是将視圖轉化為模型,即将所看到的頁面轉化成後端的資料。在MVVM的架構下視圖和模型是不能直接通信的,它們通過ViewModel來通信,ViewModel通常要實作一個observer觀察者,當資料發生變化ViewModel能夠監聽到資料的這種變化,然後通知到對應的視圖做自動更新,而當使用者操作視圖,VIewModel也能監聽到視圖的變化,然後通知資料做改動,這實際上就實作了資料的雙向綁定,并且MVVM中的View和ViewModel可以互相通信,如下:

MVVM、MVC及MVP

2. MVC

        MVC是Model-View-Conroller,即模型-視圖-控制器,M和V指的意思和MVVM中的M和V的意思一樣,C即Controller指的是頁面業務邏輯,使用MVC的目的就是将M和V的代碼分離,MVC是單向通信,也就是View跟Model,必須通過Controller承上啟下。MVC和MVVM的差別并不是VM完全取代C,ViewModel存在的目的在于抽離Controller中展示的業務邏輯,而不是替代Controller,其它視圖操作業務等還是應該在Controller中實作,也就是說MVVM實作的是業務邏輯元件的重用。

3.MVP

        MVP的全稱為Model-View-Presenter,Model提供資料,View負責顯示,Controller/Presenter負責邏輯的處理。MVP與MVC有着一個重大的差別:在MVP中View并不直接使用Model,它們之間的通信是通過Presenter(MVC中的Controller)來進行的,所有的互動都發生在Presenter内部,而在MVC中View會直接從Model中讀取資料而不是通過Controller。

MVP模式下表示層的優勢展現在下面三個方面:

  1. View與Model完全隔離。

    得益于此,Model和View之間具有良好的松耦合設計,這意味着,如果Model或View中的一方發生變化,隻要互動接口不變,另一方就沒必要對上述變化做出改變。這使得Model層的業務邏輯具有很好的靈活性和可重用性。

  2. Presenter與View的具體實作技術無關。

    也就是說,采用諸如Windows表單,WPF,Web表單等使用者界面建構技術中的任意一種來實作View層,都無需改變系統的其他部分。甚至為了使B/S,C/S部署架構能夠被同時支援,應用程式可以用同一個Model層适配多種技術建構的View層。

  3. 可以進行View的模拟測試。

    過去,由于View和Model之間的緊耦合,在Model和View同時開發完成之前對其中一方進行測試是不可能的。出于同樣的原因,對View或Model進行單元測試很困難。現在,MVP模式解決了所有的問題。在MVP模式中,View和Model之間沒有直接依賴,開發者能夠借助模拟對象注入測試兩者中的任一方。

繼續閱讀