剛出來工做的時候維護過一個老系統,該系統是用微軟的ASP(Active Server Pages 動態服務器頁面)寫的。每個頁面都是一個ASP文件,每個一個ASP文件中又同時包含了HTML、CSS、Java Script、VB Script代碼,把這麼多代碼糅合在一塊兒,能夠想象一下若是一個這樣的頁面包含複雜的業務邏輯,每當要對系統進行維護或增長新功能的時候那個酸爽~
html
像上面這種把界面、業務邏輯和數據模型都整合在一塊兒的作法,從軟件的設計和可維護性方面看都是極不可取的。爲了解決上述問題就發展出了各類MV*框架模式(MV*理論自己是一種模式,但它的各類實現又叫MV*框架),它是經過解決M和V的耦合問題來實現界面分離。前端
總結:能夠從上面的全稱能夠看出不管MVC、MVP和MVVM都是圍繞着Model和View,都是爲了解決Model和View的耦合問題,只是實現的思想不同而已。數據庫
MVC把軟件系統分爲三個基本部分:模型(Model)、視圖(View)和控制器(Controller),關係以下圖所示:服務器
模型(Model):數據庫相關的操做、文件的訪問和數據結構等。網絡
視圖(View):專一於顯示,如Web前端(HTML/CSS/Java Script)數據結構
控制器(Controller):鏈接模型和視圖,如把視圖的請求發送給模型或把數據返回給視圖等mvc
經典的Web MVC模式,實現的框架有ASP.Net MVC/Spring MVC 等,在Web MVC中Model的數據經過Controller返回給View。框架
經典實現有PureMVC,PureMVC 是在基於MVC模式創建的一個輕量級的應用框架。它的Model與View的交互是經過觀察者模式實現的,當Model有變化要通知View的時候Model把消息發送給通知分發中心,而後通知分發中心把消息發送到View。spa
MVC的實現了視圖和模型的分離,避免了視圖和模型糅合在一塊兒,當視圖改變的時候只要業務邏輯沒變不須要改變模型;可是它有一個缺點缺點是由於MVC中的控制器並不能直接更新視圖,因此MVC並不能實現視圖和模型的徹底分離,視圖依然依賴模型的數據(數據結構)來顯示,也就是說視圖依賴模型。設計
MVP是針對MVC的缺點而進行了改進,它把軟件系統分爲三個基本部分:模型(Model)、視圖(View)和展現器(Presenter),關係以下圖所示:
模型(Model):數據庫相關的操做、文件的訪問和數據結構等。
視圖(View):專一於顯示,如Web前端(HTML/CSS/Java Script)
展現器(Presenter):鏈接模型和視圖,處理視圖的請求並根據模型更新視圖。
MVP用展現器代替了控制器,而展現器是能夠直接更新視圖,因此MVP中展現器能夠處理視圖的請求並遞送到模型又能夠根據模型的變化更新視圖,實現了視圖和模型的徹底分離。
MVVM是MVP更進一步的發展,把軟件系統分爲三個基本部分:模型(Model)、視圖(View)和視圖模型(ViewModel),關係以下圖所示:
模型(Model):數據庫相關的操做、文件的訪問和數據結構等。
視圖(View):專一於顯示,如Web前端(HTML/CSS/Java Script)
視圖模型(ViewModel):鏈接模型和視圖,視圖模型和視圖是雙休綁定的。
MVVM用視圖模型代替了MVP中的展現器,視圖模型和視圖實現了雙向綁定,當視圖發生變化的時候視圖模型也會發生改變,當視圖模型變化的時候視圖也隨之變化。
MVC/MVP/MVVM都是根據不一樣的應用需求和應用環境逐步發展而來的,它們都有各自優缺點和適用環境。好比Web開發中由於要跨越網絡通信,若是使用MVP或者MVVM來實現代價是巨大的,由於目前來講網絡數據很珍貴的資源。