MVC,MVP和MVVM的區別

 MVC
 

轉載標名出處  dubhtml

從這幅圖能夠看到,咱們能夠看到在MVC裏,View是能夠直接訪問Model的!從而,View裏會包含Model信息,不可避免的還要包括一些業務邏輯。android

在MVC模型裏,更關注的Model的不變,而同時有多個對Model的不一樣顯示,及View。程序員

因此,在MVC模型裏,Model不依賴於View,可是View是依賴於Model的。不只如此,由於有一些業務邏輯在View裏實現了,致使要更改View也是比較困難的,至少那些業務邏輯是沒法重用的。數據庫

Visual Studio等快速開發工具,讓咱們很難把View和Controller分開,咱們老是直接在View的事件響應函數裏完成了Controller的代碼。而在ASP.NET和XAML裏,使用了一種叫作Code-Behind的技術,能夠把View和Controller進行分離。這樣,View就能夠徹底由UI設計工程師來完成,而Controller由程序員來完成,二者能夠直接合成不須要像如今同樣再由程序員作不少的工做。設計模式

把Controller和View混在一塊兒,有什麼問題?api

1.難以測試。服務器

  必須手動點擊,使用各類自動化的測試工具。app

2.代碼難以重用。函數

  UI是很難重用,由於要求老是不一樣。因此,致使重複的代碼四處都是,維護麻煩。工具

 

 

MVP

  View :是指顯示數據而且和用戶交互的層。在安卓中,它們能夠是一個Activity,一個Fragment,一個android.view.View或者是一個Dialog。

  Model :是數據源層。好比數據庫接口或者遠程服務器的api。

  Presenter:是從Model中獲取數據並提供給View的層,Presenter還負責處理後臺任務

    MVP是一個將後臺任務和activities/views/fragment分離的方法,讓它們獨立於絕大多數跟生命週期相關的事件。這樣應用就會變得更簡單,整個應用的穩定性提升10倍以上,代碼也變得更短,可維護性加強,程序員也不會過勞死了~~

一個暴露接口,一個實現接口,流水式的設計,單向

在MVP裏,Presenter徹底把Model和View進行了分離,主要的程序邏輯在 Presenter裏實現。並且,Presenter與具體的View是沒有直接關聯的,而是經過定義好的接口進行交互,從而使得在變動View時候能夠 保持Presenter的不變,即重用!

不只如此,咱們還能夠編寫測試用的View,模擬用戶的各類操做,從而實現對Presenter的測試--而不須要使用自動化的測試工具。

咱們甚至能夠在Model和View都沒有完成時候,就能夠經過編寫Mock Object(即實現了Model和View的接口,但沒有具體的內容的)來測試Presenter的邏輯。

在MVP裏,應用程序的邏輯主要在Presenter來實現,其中的View是很薄的一層。 所以就有人提出了Presenter First的設計模式,就是根據User Story來首先設計和開發Presenter。在這個過程當中,View是很簡單的,可以把信息顯示清楚就能夠了。在後面,根據須要再隨便更改View, 而對Presenter沒有任何的影響了。

若是要實現的UI比較複雜,並且相關的顯示邏輯還跟Model有關係,就能夠在View和 Presenter之間放置一個Adapter。由這個 Adapter來訪問Model和View,避免二者之間的關聯。而同時,由於Adapter實現了View的接口,從而能夠保證與Presenter之 間接口的不變。這樣就能夠保證View和Presenter之間接口的簡潔,又不失去UI的靈活性。

在MVP模式裏,View只應該有簡單的Set/Get的方法,用戶用戶輸入和設置界面顯示的內容,除此就不該該有更多的內容,毫不允許直接直接訪問Model--這就是與MVC很大的不一樣之處。

 

1. MVP 就是經過Presenter(主持)把View和Modle分開(最好用接口分開)

    方便管理  example:

        AppHolder appHolder = new AppHolder();

        view.add(appHolder.views);//加載view

        appHolder.bind(list);//加載數據

 

MVVM  

 

他是真正和實現view 和model分離,修改model 不影響view

xml文件里根節點是<layout...

           <data>

              ...

            </data>

須要監聽

 

綁定數據(按文檔)

相關文章
相關標籤/搜索