談談對MVC、MVP和MVVM的理解

來源:互聯網
上載者:User

標籤:tar   處理   平台   line   color   log   返回   control   model   

剛出來工作的時候維護過一個老系統,該系統是用微軟的ASP(Active Server Pages 動態伺服器頁面)寫的。每一個頁面都是一個ASP檔案,每一個一個ASP檔案中又同時包含了HTML、CSS、Java Script、VB Script代碼,把這麼多代碼糅合在一起,可以想象一下如果一個這樣的頁麵包含複雜的商務邏輯,每當要對系統進行維護或增加新功能的時候那個酸爽~

 

像上面這種把介面、商務邏輯和資料模型都整合在一起的做法,從軟體的設計和可維護性方面看都是極不可取的。為瞭解決上述問題就發展出了各種MV*架構模式(MV*理論本身是一種模式,但它的各種實現又叫MV*架構),它是通過解決M和V的耦合問題來實現介面分離。

  • MVC:Model-View-Controller
  • MVP:Model-View-Presenter
  • MVVM:Model-View-ViewModel

總結:可以從上面的全稱可以看出無論MVC、MVP和MVVM都是圍繞著Model和View,都是為瞭解決Model和View的耦合問題,只是實現的思想不一樣而已。

 

MVC

MVC把軟體系統分為三個基本部分:模型(Model)、視圖(View)和控制器(Controller),關係如所示:

模型(Model):資料庫相關的操作、檔案的訪問和資料結構等。

視圖(View):專註於顯示,如Web前端(HTML/CSS/Java Script)

控制器(Controller):串連模型和視圖,如把視圖的請求發送給模型或把資料返回給視圖等

 

MVC只是一種架構模式,針對不同的平台環境的實現方式會有些區別:Web MVC

經典的Web MVC模式,實現的架構有ASP.Net MVC/Spring MVC 等,在Web MVC中Model的資料通過Controller返回給View。

案頭UI MVC

經典實現有PureMVC,PureMVC 是在基於MVC模式建立的一個輕量級的應用程式框架。它的Model與View的互動是通過觀察者模式實現的,當Model有變化要通知View的時候Model把訊息發送給通知分發中心,然後通知分發中心把訊息發送到View。

 

總結:

MVC的實現了視圖和模型的分離,避免了視圖和模型糅合在一起,當視圖改變的時候只要商務邏輯沒變不需要改變模型;但是它有一個缺點缺點是因為MVC中的控制器並不能直接更新視圖,所以MVC並不能實現視圖和模型的完全分離,視圖依然依賴模型的資料(資料結構)來顯示,也就是說視圖依賴模型。

 

MVP

MVP是針對MVC的缺點而進行了改進,它把軟體系統分為三個基本部分:模型(Model)、視圖(View)和展示器(Presenter),關係如所示:

模型(Model):資料庫相關的操作、檔案的訪問和資料結構等。

視圖(View):專註於顯示,如Web前端(HTML/CSS/Java Script)

展示器(Presenter):串連模型和視圖,處理視圖的請求並根據模型更新視圖。

 

總結:

MVP用展示器代替了控制器,而展示器是可以直接更新視圖,所以MVP中展示器可以處理視圖的請求並遞送到模型又可以根據模型的變化更新視圖,實現了視圖和模型的完全分離。

 

MVVM

MVVM是MVP更進一步的發展,把軟體系統分為三個基本部分:模型(Model)、視圖(View)和視圖模型(ViewModel),關係如所示:

模型(Model):資料庫相關的操作、檔案的訪問和資料結構等。

視圖(View):專註於顯示,如Web前端(HTML/CSS/Java Script)

視圖模型(ViewModel):串連模型和視圖,視圖模型和視圖是雙休綁定的。

 

總結:

MVVM用視圖模型代替了MVP中的展示器,視圖模型和視圖實現了雙向繫結,當視圖發生變化的時候視圖模型也會發生改變,當視圖模型變化的時候視圖也隨之變化。

 

MVC/MVP/MVVM都是根據不同的應用需求和應用環境逐步發展而來的,它們都有各自優缺點和適用環境。比如Web開發中因為要跨越網路通訊,如果使用MVP或者MVVM來實現代價是巨大的,因為目前來說網路資料很珍貴的資源。

 

轉載請註明出處:http://www.cnblogs.com/keitsi/p/5764785.html

談談對MVC、MVP和MVVM的理解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.