1. 程式人生 > >MVC, MVP, MVVM比較以及區別(上)

MVC, MVP, MVVM比較以及區別(上)

MVC, MVP和MVVM都是用來解決介面呈現和邏輯程式碼分離而出現的模式。以前只是對它們有部分的瞭解,沒有深入的研究過,對於一些裡面的概念和區別也是一知半解。現在一邊查資料,並結合自己的理解,來談一下對於這三種模式思想的理解,以及它們的區別。歡迎各位高手拍磚。

閱讀目錄:

一. MVC, MVP, MVVM誕生的需求?

二. 一段典型的耦合程式碼

三. MVC模式

     3.1 主動MVC

     3.2 被動MVC

     3.3 Web應用中的MVC框架

     3.4 MVC總結

一,MVC, MVP, MVVM誕生的需求?

軟體中最核心的,最基本的東西是什麼? 是的,是資料。我們寫的所有程式碼,都是圍繞資料的。
圍繞著資料的產生、修改等變化,出現了業務邏輯。
圍繞著資料的顯示,出現了不同的介面技術。 

沒有很好設計的程式碼,常常就會出現資料層(持久層)和業務邏輯層還有介面程式碼耦合的情況。

ORM等框架,解耦合了業務邏輯和資料之間的耦合,業務邏輯不再關心底層資料如何儲存和讀取。所有資料呈現給業務邏輯層的就是一個個的物件。
而MVC, MVP, MMVM用來解決業務邏輯和檢視之間的耦合。

二,一段典型的耦合程式碼

{

SqlDataAdapter adapter = new SqlDataAdapter("select * from Table1","server=.;database=db;uid=sa;pwd=password");

DataSet ds = new
DataSet("ds1"); adapter.Fill(ds); this.GridView1.DataSource = ds; this.GridView1.DataBind(); }

上面的這段程式碼中,既包含了資料訪問,還包含的頁面展示。當專案複雜程度更高,這種程式碼就會變得非常難以維護,層次也不清晰。

三,MVC模式

MVC全名是Model View Controller,是模型(model)-檢視(view)-控制器(controller)的縮寫。MVC開始是存在於桌面程式中的,M是指業務模型,V是指使用者介面,C則是控制器,使用MVC的目的是將M和V的實現程式碼分離,從而使同一個程式可以使用不同的表現形式

3.1 主動MVC

MVC的理論思想對應的是主動MVC, 這裡的主動的意思是, Model會主動通知View更新。而我們使用MVC框架, Struts, asp.net mvc等都不是主動MVC(檢視的更新都是通過Controller完成的)

Model

用於封裝與應用程式的業務邏輯相關的資料以及對資料的處理方法。
模型中資料的變化一般會通過一種重新整理機制被公佈。為了實現這種機制,那些用於監視此模型的檢視必須事先在此模型上註冊,從而,檢視可以瞭解在資料模型上發生的改變。

View

檢視層負責資料的展示。
在檢視中一般沒有程式上的邏輯。為了實現檢視上的重新整理功能,檢視需要訪問它監視的資料模型(Model),因此應該事先在被它監視的資料那裡訂閱Model的事件。

Controller

控制器是M和V之間的聯結器,用於控制應用程式的流程。它處理事件並作出響應。“事件”包括使用者的行為和資料模型上的改變。

image

3.2 被動MVC

下圖是被動MVC中的流程,和主動MVC不同之處是, View沒有訂閱Model資料變化的事件,等待Model來通知需要根據新的資料來更新View. 在被動MVC中,Controller負責通知View, 有資料變化,需要更新檢視。

image

被動MVC 中,與主動MVC的區別在於:
1、模型對檢視和控制器一無所知,它僅僅是被它們使用
2、控制器使用檢視,並通知它更新資料顯示
3、檢視僅僅是在控制器通知它去模型取資料的時候它才這麼做(檢視並不會訂閱或監視模型的更新) 

3.3. Web應用中的MVC框架

Web中的MVC框架都是被動MVC模式,因為web應用中, 由於http是基於請求和響應方式協同工作的,因此當伺服器端的model(資料)發生變化時,它不會立即更新客戶端的view,只有客戶端重新請求或重新整理頁面時才更新.

下圖是典型的MVC框架中的MVC一個請求流程。

image

3.4 MVC總結

MVC優點

  • 由於MVC很好的分離了檢視層和業務層,所以它具有以下優點
  • 耦合性低
  • 開發速度快
  • 可維護性高
  • 沒有控制元件的概念,對html沒有封裝,易於理解
  • 和其它平臺(java, php)等更加相似。便於人才獲取

MVC使用的誤區

1.把Model理解成實體類(Entity),在MVC中Model應該包含2部分功能,一部分是處理業務邏輯,一部分是提供View顯示的資料
2.把業務邏輯全部放在Controller端

這兩個誤區本質上都是對Model的作用不明導致的。

Model在MVC架構中起的作用非常重要,它應該是業務邏輯真正的實現層。所以Model的實際上是Business Model(業務模型)。而Controller僅僅起一個“橋樑”作用,它負責把View的請求轉發給Model,再負責把Model處理結束的訊息通知View。Controller是用來解耦View和Model的,具體一點說,就是為了讓UI與邏輯分離(介面與程式碼分離)。

Techopedia explains Model (MVC)

The Model is the part of MVC which implements the domain logic. In simple terms, this logic is used to handle the data passed between the database and the user interface (UI).

The Model is known as domain object or domain entity.
The domain objects are stored under the Models folder in ASP.NET. The domain model represents the application perspective for the data to be handled whereas a view model is required to produce the engine that generates the View.

This definition was written in the context of ASP.NET.

MVC的缺點

完美的MVC應用場景應該是這樣的:

有個Student Model, 關聯StudentListView,  StudentEditView.
對於StudentListView, Student Model提供Student的集合資料來顯示StudentListView
對於StudentEditView, Student Model提供單個Student資料來展示StudentEditView並且響應StudentEditView的儲存操作。

但是這只是完美的情況,實際應用中,在ListView上,不單單顯示Student的資訊,可能還需要這個Student的歷史成績,家庭情況,  老師資訊。而這些是Student Model不能提供的。
也許我們可以擴充套件Student Model, 將Student Model能夠提供的資訊擴充套件,包含成績資訊等,這本身也可以。但是,如果Student顯示的View,這個需要只是需要額外的成績資訊,另一個View只是需要額外的家庭資訊,Student Model是不是有些疲於奔命,你能知道還會有多少個差異化的View的需求? 而且讓邏輯端程式碼這樣不斷的修改來適應View端,好嗎?

由於MVC的設計思想是從Model出發,而沒有考慮到View端的複雜性,這樣導致的問題是Model難以符合複雜多變的View端變化。
相對這點,MVP和MVVM就要好得多。它們都獨立出了Presenter 和ViewModel來對應每個View。

相關推薦

MVC, MVP, MVVM比較以及區別()

MVC, MVP和MVVM都是用來解決介面呈現和邏輯程式碼分離而出現的模式。以前只是對它們有部分的瞭解,沒有深入的研究過,對於一些裡面的概念和區別也是一知半解。現在一邊查資料,並結合自己的理解,來談一下對於這三種模式思想的理解,以及它們的區別。歡迎各位高手拍磚。 閱讀目錄: 一. MVC, M

MVC, MVP, MVVM比較以及區別

MVC, MVP和MVVM都是用來解決介面呈現和邏輯程式碼分離而出現的模式。以前只是對它們有部分的瞭解,沒有深入的研究過,對於一些裡面的概念和區別也是一知半解。現在一邊查資料,並結合自己的理解,來談一下對於這三種模式思想的理解,以及它們的區別。 一,MVC, MVP

MVC, MVP, MVVM比較以及區別(下)

 上一篇得到大家的關注,非常感謝。一些朋友評論中,希望快點出下一篇。由於自己對於這些模式的理解也是有限,所以這一篇來得遲了一些。對於這些模式的比較,是結合自己的理解,一些地方不一定準確,但是隻有亮出自己的觀點,才能拋磚引玉不是? 歡迎各位拍磚。:) 閱讀目錄: 四. MVP模式      4

前端開發中,MVC/MVP/MVVM區別

MVC/MVP/MVVM 都是常見的軟體架構設計模式。說到區別,主要在於 C(Controller)、P(Presenter)、VM(View-Model)。相同點則是 MV(Model-View)。 Model Model 層用於封裝和應用程式的業務邏輯相關的資料以及對

Android 系統(77)---MVC,MVP,MVVM區別

MVC,MVP,MVVM的區別一、MVC 軟體可以分為三部分1.Model:模型層,負責處理資料的載入或者儲存 2. View:檢視層,負責介面資料的展示,與使用者進行互動 3.Controller:控制器層,負責邏輯業務的處理各部分之間的通訊方式如下:View傳送指令到Co

Android App的設計架構:MVC,MVP,MVVM與架構經驗談

用戶 自己的 req html pla 觀察 持久化 重構 his 來源: Android App的設計架構:MVC,MVP,MVVM與架構經驗談 和MVC框架模式一樣,Model模型處理數據代碼不變在Android的App開發中,很多人經常會頭疼於App的架構如何設計:

淺析前端開發中的 MVC/MVP/MVVM 模式

所有 團隊 sub 策略 代碼 告訴 簡單 ava 關心 MVC,MVP和MVVM都是常見的軟件架構設計模式(Architectural Pattern),它通過分離關註點來改進代碼的組織方式。不同於設計模式(Design Pattern),只是為了解決一類問題而總結出的抽

MVC,MVP,MVVM

route src HA 路由 路由器 控制器 view 數據保存 9.png MVC MVC模式的意思是,軟件可以分成三個部分 視圖(View):用戶界面。 控制器(Controller):業務邏輯 模型(Model):數據保存 實際項目往往采用更靈活的方式,以 Back

MVC/MVP/MVVM

現在 也有 lis 驗證 設定 思考 不同 最大的 也好 架構模式的文章很多,好理解的沒有幾個。大部分文章出現的主要問題有: 沒有設定好作用域:前端MVC是改造過的MVC,和後臺MVC有明顯的區別,不能一概而論 沒有實際的例子:實際的例子對應日常的工作,沒有就很難產

MVC-MVP-MVVM框架模式分析

無法 連接 不能 相互 轉化 觀察者 作用 展示 .com MVC(Model-View-Controller) MVC 架構模式圖(經典版) 註:實際上,Model和View永遠不能相互通信,只能通過Controller傳遞;上圖只是MVC模式的經典圖。 MVC一般流程

MVC MVP MVVM初級版

學習Vue.js的時候,官網提到了MVVM順便總結一下。慢慢熟悉。 因為是初級版,還沒有時間做出太詳細的總結,先在這裡Mark一下,把網路上能搜尋到的概念和資源先拷貝過來。後續再看情況寫中級版和高階版。 MVC MVC是軟體工程中的一種軟體架構模式,把軟體系統分為三個基本部分:模型(

談談MVC-MVP-MVVM的漸進使用和誤解

講這三種設計模式之前,咱先列舉一個使用場景,現在有如下需求: 開發需求:頁面有個列表用於顯示新聞,新聞可以收藏,點贊 首先說說MVC : L:負責承載新聞資料模型物件:標題,內容,等等 五:負責新聞展示的觀 C:負責新聞資料的業務邏輯和展示邏輯 不需要多說稍微有點經驗的人都知道

你真的理解了MVC, MVP, MVVM嗎?

點選上方“程式設計師小灰”,選擇“置頂公眾號”有趣有內涵的文章第一時間送達!本文轉載自公眾號 

android 架構模式MVC,MVP,MVVM

  從只會實現功能的“碼農”到軟體工程師、設計師的過渡。   MVP/MVVM架構的優點和缺點?它的使用場景是什麼?   MVC是一種框架模式而非設計模式,GOF把MVC看作是3種設計模式:觀察者模式、策略模式與組合模式的合體,而核心是觀察者模式。簡而言之,框架是大智慧,用

iOS架構模式-揭祕MVC,MVP,MVVM和VIPER

iOS架構模式揭祕MVC,MVP,MVVM和VIPER英文原文:https://medium.com/ios-os-x-development/ios-architecture-patterns-ecba4c38de52#.w3sovqjl3作者:Bohdan Orlov翻譯

android MVC && MVP && MVVM分析和對比

  面試的時候被問到這個問題,用過,也瞭解過,但是還是不夠深入,總結一下。   MVC,MVP和MVVM是軟體比較常用的三種軟體架構,這三種架構的目的都是分離關注,避免將過多的邏輯全部堆積在一個類中,以android為例,在activity中既有UI的相關處理

雜談: MVC/MVP/MVVM

前言 本文為回答一位朋友關於MVC/MVP/MVVM架構方面的疑問所寫, 旨在介紹iOS下MVC/MVP/MVVM三種架構的設計思路以及各自的優缺點. 全文約五千字, 預計花費閱讀時間20 – 30分鐘. MVC MVC的相關概念 MVC最早存在於桌面程式中的, M是指業務資

iOS架構模式MVC+MVP+mvvm架構

隨著iOS職位的火熱,越來越多的人都想成為一名優秀的iOS開發工程師,那麼在競爭激烈的時代,應該如何成為一名iOS開發工程師呢?現在讓大家瞭解一下iOS架構模式作為一個開發者,有一個學習的氛圍跟一個交流圈子特別重要這是一個我的iOS交流群:687528266,不管你是小白還是

揭開MVC,MVP,MVVM,VIPER這幾種模式的神祕面紗

iOS Architecture Patterns Demystifying MVC, MVP, MVVM and VIPER Feeling weird while doing MVC in iOS? Have doubts about switchi

MVC/MVP/MVVM 前端框架模式

簡單來講就是:檢視(View):使用者介面控制器(Controller):業務邏輯模型(Model):資料儲存使用者操作介面,View接受指令,View 傳送指令到 Controller,也就是從View層到Control層的箭頭所示Controller 完成業務邏輯後,要求 Model 改變狀態,也就是從C