1. 程式人生 > >MVC、MVP、MVVM使用關係總結

MVC、MVP、MVVM使用關係總結

MVC

MVC全名是Model View Controller,是模型(model)-檢視(view)-控制器(controller)的縮寫,一種軟體設計典範,用一種業務邏輯、資料、介面顯示分離的方法組織程式碼,將業務邏輯聚集到一個部件裡面,在改進和個性化定製介面及使用者互動的同時,不需要重新編寫業務邏輯。MVC被獨特的發展起來用於對映傳統的輸入、處理和輸出功能在一個邏輯的圖形化使用者介面的結構中。

MVC

資料關係

  • View 接受使用者互動請求
  • View 將請求轉交給Controller
  • Controller 操作Model進行資料更新
  • 資料更新之後,Model通知View更新資料變化
  • View 更新變化資料

方式

所有方式都是單向通訊

結構實現

View :使用 Composite模式
View和Controller:使用 Strategy模式
Model和 View:使用 Observer模式同步資訊

使用

MVC中的View是可以直接訪問Model的!從而,View裡會包含Model資訊,不可避免的還要包括一些業務邏輯。在MVC模型裡,更關注的Model的不變,而同時有多個對Model的不同顯示,及View。所以,在MVC模型裡,Model不依賴於View,但是 View是依賴於Model的。不僅如此,因為有一些業務邏輯在View裡實現了,導致要更改View也是比較困難的,至少那些業務邏輯是無法重用的。

MVP

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

MVP

資料關係

  • View 接收使用者互動請求
  • View 將請求轉交給 Presenter
  • Presenter 操作Model進行資料更新
  • Model 通知Presenter資料發生變化
  • Presenter 更新View資料

MVP的優勢

  1. Model與View完全分離,修改互不影響
  2. 更高效地使用,因為所有的邏輯互動都發生在一個地方—Presenter內部
  3. 一個Preseter可用於多個View,而不需要改變Presenter的邏輯(因為View的變化總是比Model的變化頻繁)。
  4. 更便於測試。把邏輯放在Presenter中,就可以脫離使用者介面來測試邏輯(單元測試)

方式

各部分之間都是雙向通訊

結構實現

View :使用 Composite模式
View和Presenter:使用 Mediator模式
Model和Presenter:使用 Command模式同步資訊

MVC和MVP區別

MVP與MVC最大的一個區別就是:Model與View層之間倒底該不該通訊(甚至雙向通訊)

MVC和MVP關係

MVP:是MVC模式的變種。
專案開發中,UI是容易變化的,且是多樣的,一樣的資料會有N種顯示方式;業務邏輯也是比較容易變化的。為了使得應用具有較大的彈性,我們期望將UI、邏輯(UI的邏輯和業務邏輯)和資料隔離開來,而MVP是一個很好的選擇。
Presenter代替了Controller,它比Controller擔當更多的任務,也更加複雜。Presenter處理事件,執行相應的邏輯,這些邏輯對映到Model操作Model。那些處理UI如何工作的程式碼基本上都位於Presenter。
MVC中的Model和View使用Observer模式進行溝通;MPV中的Presenter和View則使用Mediator模式進行通訊;Presenter操作Model則使用Command模式來進行。基本設計和MVC相同:Model儲存資料,View對Model的表現,Presenter協調兩者之間的通訊。在 MVP 中 View 接收到事件,然後會將它們傳遞到 Presenter, 如何具體處理這些事件,將由Presenter來完成。
如果要實現的UI比較複雜,而且相關的顯示邏輯還跟Model有關係,就可以在View和 Presenter之間放置一個Adapter。由這個 Adapter來訪問Model和View,避免兩者之間的關聯。而同時,因為Adapter實現了View的介面,從而可以保證與Presenter之 間介面的不變。這樣就可以保證View和Presenter之間介面的簡潔,又不失去UI的靈活性。

使用

MVP的實現會根據View的實現而有一些不同,一部分傾向於在View中放置簡單的邏輯,在Presenter放置複雜的邏輯;另一部分傾向於在presenter中放置全部的邏輯。這兩種分別被稱為:Passive View和Superivising Controller。

MVVM

MVVM是Model-View-ViewModel的簡寫。微軟的WPF帶來了新的技術體驗,如Silverlight、音訊、視訊、3D、動畫……,這導致了軟體UI層更加細節化、可定製化。同時,在技術層面,WPF也帶來了 諸如Binding、Dependency Property、Routed Events、Command、DataTemplate、ControlTemplate等新特性。MVVM(Model-View-ViewModel)框架的由來便是MVP(Model-View-Presenter)模式與WPF結合的應用方式時發展演變過來的一種新型架構框架。它立足於原有MVP框架並且把WPF的新特性糅合進去,以應對客戶日益複雜的需求變化。

MVVM

資料關係

  • View 接收使用者互動請求
  • View 將請求轉交給ViewModel
  • ViewModel 操作Model資料更新
  • Model 更新完資料,通知ViewModel資料發生變化
  • ViewModel 更新View資料

方式

雙向繫結。View/Model的變動,自動反映在 ViewModel,反之亦然。

使用

  • 可以相容你當下使用的 MVC/MVP 框架。
  • 增加你的應用的可測試性。
  • 配合一個繫結機制效果最好。

MVVM優點

MVVM模式和MVC模式一樣,主要目的是分離檢視(View)和模型(Model),有幾大優點:
1. 低耦合。View可以獨立於Model變化和修改,一個ViewModel可以繫結到不同的”View”上,當View變化的時候Model可以不變,當Model變化的時候View也可以不變。
2. 可重用性。你可以把一些檢視邏輯放在一個ViewModel裡面,讓很多view重用這段檢視邏輯。
3. 獨立開發。開發人員可以專注於業務邏輯和資料的開發(ViewModel),設計人員可以專注於頁面設計,生成xml程式碼。
4. 可測試。介面素來是比較難於測試的,而現在測試可以針對ViewModel來寫。

mvc,mvp,mvvm三者演化

演化

說明

任何的專案框架,都是為專案服務的。沒有絕對的好壞之分,只有更合適的選擇。在專案進展的不同階段,做出最合適的調整,才是是更適合團隊專案發展的框架。專案設計者要謹記,任何的專案設計,都是要圍繞專案發展階段,團隊成員規模,和團隊整體能力而定的。切莫為了設計而設計,為了框架而框架。快速,高效的配合整個團隊進展專案,才是最合適的架構。才是一個程式設計師為成一個leader,成為一個架構師的必經之路。

相關推薦

MVCMVPMVVM使用關係總結

MVC MVC全名是Model View Controller,是模型(model)-檢視(view)-控制器(controller)的縮寫,一種軟體設計典範,用一種業務邏輯、資料、介面顯示分離的方法組織程式碼,將業務邏輯聚集到一個部件裡面,在改進和個性化定製介面及使用者

【框架篇】mvcmvpmvvm使用關系總結

mvc模型 details eset 網站架構 特性 自動 分享 規模 arch MVC MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟件設計典範,用一種業務邏輯、數據、界面顯

MVCMVPMVVM模式對比總結(2)橫向構架模型

span del nec 處理請求 eth .cn pos 實現 通過 前言說明 在實戰項目及學習中來總結一下Android端項目構架 包括MVC、MVP、MVVM,主要針對移動Android端 該篇只描述橫向構架模型 目錄 1.構架基礎 2.橫向構架模型 3.縱向

Android進階十八 MVCMVPMVVM架構總結

一、MVVM概述 MVVM是一種軟體開發架構,是Model-View-View Model的縮寫,在Android中要實現MVVM架構, 需要使用Databinding的框架,Databinding即資料繫結,是Google為了能在Android上實現MVV

淺談MVCMVPMVVM架構模式的區別和聯系

.html csdn 獲取 視圖 viewmodel url title tle htm 淺談MVC、MVP、MVVM架構模式的區別和聯系 學習了:http://www.cnblogs.com/guwei4037/p/5591183.html http://blog.csd

Android 程序架構: MVCMVPMVVMUnidirectionalClean...

不同 概念 可能 十年 tin gettext 聲明 數據 content 摘選自:GUI 應用程序架構的十年變遷:MVC、MVP、MVVM、Unidirectional、Cleanhttps://zhuanlan.zhihu.com/p/26799645 MV

從Script到Code BlocksCode Behind到MVCMVPMVVM

主題 描述 傳輸 對象之間的關系 方法 動力 基本 com load() 剛過去的周五(3-14)例行地主持了技術會議,主題正好是《UI層的設計模式——從Script、Code Behind到MVC、MVP、MVVM》,是前一天晚上才定的,中午花了半小時準備了下就開講了。

Android中MVCMVPMVVM具體解釋

line 業務邏輯 指令 問題 今天 操作 才幹 入口 pre 前言 今天有時間就剛好有想寫關於這幾個名詞。對於我來說。事實上這麽多名詞、思想歸根究竟就是要依據項

MVCMVPMVVM之間的關系

mvp 工作 更多 lan mod 技術 https v-model 產生 介紹   寫這篇隨筆完全是為了加深自己的印象,畢竟寫比看能獲得得更多,另外本人對這三種模式的認識還是淺薄的,有待在以後的工作學習中有更深入的理解,因此不免會有誤解,這裏推薦大家閱讀廖雪峰關於MVV

IOS —— MVCMVPMVVM 隨筆

以前做IOS開發工作的時候,部門領導苦口婆心的給我科普過MVC和MVVM的區別,簡要來說MVC框架臃腫,分工不明,只勝在程式碼量少。 MVVM程式碼量繁多、勝在框架分工明確便於除錯及應用。 當然那都是一倆年前對於當時剛入行作為菜雞的自己,對於這個框架的理解 現在重新來根據圖文講講來自三者的功能及區別。

【iOS】MVCMVPMVVM

MVC MVC模式涉及三種物件:模型物件、檢視物件、控制器物件。模型物件中儲存有應用程式的資料,檢視物件負責顯示模型物件的資料,並且允許使用者對其進行編輯。控制器物件是模型物件和檢視物件之間的協調者,負責對模型物件進行初始化,並將模型物件傳遞給檢視物件進行解析顯示。  

三層架構MVCMVPMVVM簡介

1. 三層架構 三層架構就是將整個業務應用劃分為: UI層:介面層(User Interface layer) BLL層:業務邏輯層(Business Logic Layer) DAL層:資料訪問層(Data access layer) 區分層次的目的是為了

Android 架構設計:MVCMVPMVVM和元件化

MVC、MVP和MVVM是常見的三種架構設計模式,當前MVP和MVVM的使用相對比較廣泛,當然MVC也並沒有過時之說。而所謂的元件化就是指將應用根據業務需求劃分成各個模組來進行開發,每個模組又可以編譯成獨立的APP進行開發。理論上講,元件化和前面三種架構設計不是

android原始碼設計模式——框構模式MVCMVPMVVM

一、框架模式、設計模式、架構模式的概念理解        通常來講框架面向於一系列相同行為程式碼的重用,而設計則面向的是一系列相同結構程式碼的重用,通常所說的架構則介於框架與設計之間 二、MVC、MVP、MVVM三種設計模式        2.1、MVC模式,常見的應用模式,

介面之下:還原真實的 MVCMVPMVVM 模式

一、前言 做客戶端開發、前端開發對MVC、MVP、MVVM這些名詞不瞭解也應該大致聽過,都是為了解決圖形介面應用程式複雜性管理問題而產生的應用架構模式。網上很多文章關於這方面的討論比較雜亂,各種MV*模式之間的區別分不清,甚至有些描述都是錯誤的。本文追根溯

iOS架構模式MVCMVPMVVM(內附demo)

MVC MVC的實現思路是:使用者操作View,在Controller層完成業務邏輯處理,更新Model層,將資料顯示在View層。 在MVC中,每個層之間都有關聯,耦合比較緊,在大型專案中,維護起來比較費力。 View把控制權交給Controller層,

淺談mvcmvpmvvm框架模式

背景:隨著軟體工業的發展,複雜的軟體沒有清晰合理的架構,很難開發和維護,於是出現了MVC框架模式。 一、MVC 簡介: MVC,是模型(model)-檢視(view)-控制器(contro

細說Android框架設計三劍客MVCMVPMVVM

    最近幾年的移動端開發越來越火,功能越來越強大,處理業務越來越複雜,因此對系統擴充套件性的要求越來越高。而為了更好地進行移動端架構設計,我們最常用的就是MVC和MVP,今天本篇部落格就和大家一起聊一聊這兩種框架設計。 MVC框架 MVC的定義

Android框架MVCMVPMVVM探究(圖解+案例+附原始碼)

1、介紹 MVC、MVP、MVVM這些模式是為了解決開發過程中的實際問題而提出來的,目前作為主流的幾種架構模式而被廣泛使用。本文程式碼 2、瞭解並區分MVC,MVP,MVVM 2.1 MVC MVC,(Model View Controller)

MVCMVPMVVM的理解

最近看了一堆js框架的文件,有點亂,想分門別類整理一下,但是首先需要搞清楚這些框架裡面經常談論的MV*之類的概念。MVC的概念很早就知道,現在發現還有MVP、MVVM,那麼這些設計模式有什麼區別呢?談一下自己的理解。 剛開始理解這些概念的時候認為這幾種模式雖然都是要將vi