最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ASP.NET小結(jié)之MVC, MVP, MVVM比較以及區(qū)別(一)

 更新時間:2014年05月14日 16:27:13   作者:  
MVC, MVP和MVVM都是用來解決界面呈現(xiàn)和邏輯代碼分離而出現(xiàn)的模式。以前只是對它們有部分的了解,沒有深入的研究過,對于一些里面的概念和區(qū)別也是一知半解?,F(xiàn)在一邊查資料,并結(jié)合自己的理解,來談一下對于這三種模式思想的理解,以及它們的區(qū)別。歡迎各位高手拍磚。

MVC, MVP和MVVM都是用來解決界面呈現(xiàn)和邏輯代碼分離而出現(xiàn)的模式。以前只是對它們有部分的了解,沒有深入的研究過,對于一些里面的概念和區(qū)別也是一知半解?,F(xiàn)在一邊查資料,并結(jié)合自己的理解,來談一下對于這三種模式思想的理解,以及它們的區(qū)別。歡迎各位高手拍磚。

閱讀目錄:

復(fù)制代碼 代碼如下:

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

二. 一段典型的耦合代碼

三. MVC模式

     3.1 主動MVC

     3.2 被動MVC

     3.3 Web應(yīng)用中的MVC框架

     3.4 MVC總結(jié)

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

軟件中最核心的,最基本的東西是什么? 是的,是數(shù)據(jù)。我們寫的所有代碼,都是圍繞數(shù)據(jù)的。
圍繞著數(shù)據(jù)的產(chǎn)生、修改等變化,出現(xiàn)了業(yè)務(wù)邏輯。
圍繞著數(shù)據(jù)的顯示,出現(xiàn)了不同的界面技術(shù)。

沒有很好設(shè)計的代碼,常常就會出現(xiàn)數(shù)據(jù)層(持久層)和業(yè)務(wù)邏輯層還有界面代碼耦合的情況。

ORM等框架,解耦合了業(yè)務(wù)邏輯和數(shù)據(jù)之間的耦合,業(yè)務(wù)邏輯不再關(guān)心底層數(shù)據(jù)如何存儲和讀取。所有數(shù)據(jù)呈現(xiàn)給業(yè)務(wù)邏輯層的就是一個個的對象。
而MVC, MVP, MMVM用來解決業(yè)務(wù)邏輯和視圖之間的耦合。

二,一段典型的耦合代碼

復(fù)制代碼 代碼如下:

{

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();

}

上面的這段代碼中,既包含了數(shù)據(jù)訪問,還包含的頁面展示。當(dāng)項目復(fù)雜程度更高,這種代碼就會變得非常難以維護,層次也不清晰。

三,MVC模式

MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫。MVC開始是存在于桌面程序中的,M是指業(yè)務(wù)模型,V是指用戶界面,C則是控制器,使用MVC的目的是將M和V的實現(xiàn)代碼分離,從而使同一個程序可以使用不同的表現(xiàn)形式

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

Model

用于封裝與應(yīng)用程序的業(yè)務(wù)邏輯相關(guān)的數(shù)據(jù)以及對數(shù)據(jù)的處理方法。
模型中數(shù)據(jù)的變化一般會通過一種刷新機制被公布。為了實現(xiàn)這種機制,那些用于監(jiān)視此模型的視圖必須事先在此模型上注冊,從而,視圖可以了解在數(shù)據(jù)模型上發(fā)生的改變。

View

視圖層負責(zé)數(shù)據(jù)的展示。
在視圖中一般沒有程序上的邏輯。為了實現(xiàn)視圖上的刷新功能,視圖需要訪問它監(jiān)視的數(shù)據(jù)模型(Model),因此應(yīng)該事先在被它監(jiān)視的數(shù)據(jù)那里訂閱Model的事件。

Controller

控制器是M和V之間的連接器,用于控制應(yīng)用程序的流程。它處理事件并作出響應(yīng)?!笆录卑ㄓ脩舻男袨楹蛿?shù)據(jù)模型上的改變。

3.2 被動MVC
下圖是被動MVC中的流程,和主動MVC不同之處是, View沒有訂閱Model數(shù)據(jù)變化的事件,等待Model來通知需要根據(jù)新的數(shù)據(jù)來更新View. 在被動MVC中,Controller負責(zé)通知View, 有數(shù)據(jù)變化,需要更新視圖。

 

 

被動MVC 中,與主動MVC的區(qū)別在于:
1、模型對視圖和控制器一無所知,它僅僅是被它們使用
2、控制器使用視圖,并通知它更新數(shù)據(jù)顯示
3、視圖僅僅是在控制器通知它去模型取數(shù)據(jù)的時候它才這么做(視圖并不會訂閱或監(jiān)視模型的更新) 

3.3. Web應(yīng)用中的MVC框架
Web中的MVC框架都是被動MVC模式,因為web應(yīng)用中, 由于http是基于請求和響應(yīng)方式協(xié)同工作的,因此當(dāng)服務(wù)器端的model(數(shù)據(jù))發(fā)生變化時,它不會立即更新客戶端的view,只有客戶端重新請求或刷新頁面時才更新.

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

3.4 MVC總結(jié)
MVC優(yōu)點

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

MVC使用的誤區(qū)

1.把Model理解成實體類(Entity),在MVC中Model應(yīng)該包含2部分功能,一部分是處理業(yè)務(wù)邏輯,一部分是提供View顯示的數(shù)據(jù)
2.把業(yè)務(wù)邏輯全部放在Controller端

這兩個誤區(qū)本質(zhì)上都是對Model的作用不明導(dǎo)致的。

Model在MVC架構(gòu)中起的作用非常重要,它應(yīng)該是業(yè)務(wù)邏輯真正的實現(xiàn)層。所以Model的實際上是Business Model(業(yè)務(wù)模型)。而Controller僅僅起一個“橋梁”作用,它負責(zé)把View的請求轉(zhuǎn)發(fā)給Model,再負責(zé)把Model處理結(jié)束的消息通知View。Controller是用來解耦View和Model的,具體一點說,就是為了讓UI與邏輯分離(界面與代碼分離)。

引自http://www.techopedia.com/definition/27454/model-mvc-aspnet

復(fù)制代碼 代碼如下:

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應(yīng)用場景應(yīng)該是這樣的:

有個Student Model, 關(guān)聯(lián)StudentListView,  StudentEditView.
對于StudentListView, Student Model提供Student的集合數(shù)據(jù)來顯示StudentListView
對于StudentEditView, Student Model提供單個Student數(shù)據(jù)來展示StudentEditView并且響應(yīng)StudentEditView的保存操作。

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

由于MVC的設(shè)計思想是從Model出發(fā),而沒有考慮到View端的復(fù)雜性,這樣導(dǎo)致的問題是Model難以符合復(fù)雜多變的View端變化。
相對這點,MVP和MVVM就要好得多。它們都獨立出了Presenter 和ViewModel來對應(yīng)每個View。

相關(guān)文章

  • Asp.net中的GridView導(dǎo)出遇到的兩個問題和解決方法

    Asp.net中的GridView導(dǎo)出遇到的兩個問題和解決方法

    Asp.net下GridView導(dǎo)出遇到的兩個問題與解決方法,需要的朋友可以參考一下。
    2009-12-12
  • Jwt通過源碼揭秘隱藏大坑

    Jwt通過源碼揭秘隱藏大坑

    今天分享一下在使用JWT在項目中遇到的一個問題,主要是一個協(xié)議的細節(jié),非常容易被忽略,如果不是自己遇到,或者去看源碼的實現(xiàn),我估計至少80%的人都會栽在這里,下面來還原一下這個問題的過程,由于這個問題出現(xiàn)有一定的概率,不是每次都會出現(xiàn),所以才容易掉坑里
    2022-05-05
  • asp.net實現(xiàn)負載均衡

    asp.net實現(xiàn)負載均衡

    本文給大家分享的是asp.net實現(xiàn)負載均衡的方案,是個人的一些經(jīng)驗總結(jié),有需要的小伙伴可以參考下
    2016-01-01
  • .NetCore獲取Json和Xml格式的配置信息

    .NetCore獲取Json和Xml格式的配置信息

    本篇將和大家分享的是如何獲取Json和Xml格式的配置信息,主要介紹的是Configuration擴展方法的使用,對.netcore 獲取json和xml格式的配置信息的相關(guān)知識,感興趣的朋友一起看看吧
    2017-09-09
  • ASP.NET開發(fā)者使用jQuery應(yīng)該了解的幾件事情

    ASP.NET開發(fā)者使用jQuery應(yīng)該了解的幾件事情

    如果你是有著APS.NET開發(fā)背景的人員,那么jQuery的幾個概念建議你應(yīng)該忘掉。像使用其它的framework一樣,你應(yīng)該學(xué)習(xí)一下jQuery的所有語法等約定來讓它更好的為你服務(wù)。
    2009-09-09
  • asp.net實現(xiàn)利用反射,泛型,靜態(tài)方法快速獲取表單值到Model的方法

    asp.net實現(xiàn)利用反射,泛型,靜態(tài)方法快速獲取表單值到Model的方法

    這篇文章主要介紹了asp.net實現(xiàn)利用反射,泛型,靜態(tài)方法快速獲取表單值到Model的方法,結(jié)合實例形式分析了asp.net中反射,泛型,靜態(tài)方法給model賦值的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-11-11
  • Asp.net使用SignalR實現(xiàn)酷炫端對端聊天功能

    Asp.net使用SignalR實現(xiàn)酷炫端對端聊天功能

    這篇文章主要為大家詳細介紹了Asp.net使用SignalR實現(xiàn)酷炫端對端聊天功能,感興趣的小伙伴們可以參考一下
    2016-04-04
  • Asp.Net?Core7?preview4限流中間件新特性詳解

    Asp.Net?Core7?preview4限流中間件新特性詳解

    這篇文章主要為大家介紹了Asp.Net?Core7?preview4限流中間件的新特性示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • 使用正則Regex來移除網(wǎng)頁的EnableViewState實現(xiàn)思路及代碼

    使用正則Regex來移除網(wǎng)頁的EnableViewState實現(xiàn)思路及代碼

    創(chuàng)建好網(wǎng)頁時,什么都沒有寫,但運行時會發(fā)現(xiàn)源程序(View Source),下面一段,此刻,也許你會想起,在網(wǎng)頁有一個屬性EnableViewState,在某些時候我們并不需要它,接下來將介紹如何移除它,感興趣的朋友可以了解下啊
    2013-01-01
  • .net core高吞吐遠程方法如何調(diào)用組件XRPC詳解

    .net core高吞吐遠程方法如何調(diào)用組件XRPC詳解

    這篇文章主要給大家介紹了關(guān)于.net core高吞吐遠程方法如何調(diào)用組件XRPC的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用.net core具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05

最新評論

文登市| 潞西市| 克东县| 来安县| 岳池县| 延安市| 昔阳县| 宝清县| 铁岭市| 柳林县| 大埔区| 沙田区| 兴业县| 济阳县| 泗洪县| 泰宁县| 青冈县| 镇安县| 玉溪市| 凌源市| 共和县| 驻马店市| 孝昌县| 兴安盟| 旬邑县| 德州市| 崇信县| 阳谷县| 探索| 营山县| 密山市| 凤山市| 木兰县| 陇南市| 象山县| 上杭县| 武鸣县| 马尔康县| 镇沅| 武宣县| 荔浦县|