被動(dòng)MVC 中,與主動(dòng)MVC的區(qū)別在于:
1、模型對(duì)視圖和控制器一無所知,它僅僅是被它們使用
2、控制器使用視圖,并通知它更新數(shù)據(jù)顯示
3、視圖僅僅是在控制器通知它去模型取數(shù)據(jù)的時(shí)候它才這么做(視圖并不會(huì)訂閱或監(jiān)視模型的更新)
3.3. Web應(yīng)用中的MVC框架
Web中的MVC框架都是被動(dòng)MVC模式,因?yàn)閣eb應(yīng)用中, 由于http是基于請(qǐng)求和響應(yīng)方式協(xié)同工作的,因此當(dāng)服務(wù)器端的model(數(shù)據(jù))發(fā)生變化時(shí),它不會(huì)立即更新客戶端的view,只有客戶端重新請(qǐng)求或刷新頁(yè)面時(shí)才更新.
下圖是典型的MVC框架中的MVC一個(gè)請(qǐng)求流程。
3.4 MVC總結(jié)
MVC優(yōu)點(diǎn)
•由于MVC很好的分離了視圖層和業(yè)務(wù)層,所以它具有以下優(yōu)點(diǎn)
•耦合性低
•開發(fā)速度快
•可維護(hù)性高
•沒有控件的概念,對(duì)html沒有封裝,易于理解
•和其它平臺(tái)(java, php)等更加相似。便于人才獲取
MVC使用的誤區(qū)
1.把Model理解成實(shí)體類(Entity),在MVC中Model應(yīng)該包含2部分功能,一部分是處理業(yè)務(wù)邏輯,一部分是提供View顯示的數(shù)據(jù)
2.把業(yè)務(wù)邏輯全部放在Controller端
這兩個(gè)誤區(qū)本質(zhì)上都是對(duì)Model的作用不明導(dǎo)致的。
Model在MVC架構(gòu)中起的作用非常重要,它應(yīng)該是業(yè)務(wù)邏輯真正的實(shí)現(xiàn)層。所以Model的實(shí)際上是Business Model(業(yè)務(wù)模型)。而Controller僅僅起一個(gè)“橋梁”作用,它負(fù)責(zé)把View的請(qǐng)求轉(zhuǎn)發(fā)給Model,再負(fù)責(zé)把Model處理結(jié)束的消息通知View。Controller是用來解耦View和Model的,具體一點(diǎn)說,就是為了讓UI與邏輯分離(界面與代碼分離)。
引自http://www.techopedia.com/definition/27454/model-mvc-aspnet
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的缺點(diǎn)
完美的MVC應(yīng)用場(chǎng)景應(yīng)該是這樣的:
有個(gè)Student Model, 關(guān)聯(lián)StudentListView, StudentEditView.
對(duì)于StudentListView, Student Model提供Student的集合數(shù)據(jù)來顯示StudentListView
對(duì)于StudentEditView, Student Model提供單個(gè)Student數(shù)據(jù)來展示StudentEditView并且響應(yīng)StudentEditView的保存操作。
但是這只是完美的情況,實(shí)際應(yīng)用中,在ListView上,不單單顯示Student的信息,可能還需要這個(gè)Student的歷史成績(jī),家庭情況, 老師信息。而這些是Student Model不能提供的。
也許我們可以擴(kuò)展Student Model, 將Student Model能夠提供的信息擴(kuò)展,包含成績(jī)信息等,這本身也可以。但是,如果Student顯示的View,這個(gè)需要只是需要額外的成績(jī)信息,另一個(gè)View只是需要額外的家庭信息,Student Model是不是有些疲于奔命,你能知道還會(huì)有多少個(gè)差異化的View的需求? 而且讓邏輯端代碼這樣不斷的修改來適應(yīng)View端,好嗎?
由于MVC的設(shè)計(jì)思想是從Model出發(fā),而沒有考慮到View端的復(fù)雜性,這樣導(dǎo)致的問題是Model難以符合復(fù)雜多變的View端變化。
相對(duì)這點(diǎn),MVP和MVVM就要好得多。它們都獨(dú)立出了Presenter 和ViewModel來對(duì)應(yīng)每個(gè)View。
標(biāo)簽:張家界 天門 蘭州 新疆 陽(yáng)泉 江蘇 白山 德陽(yáng)
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《ASP.NET小結(jié)之MVC, MVP, MVVM比較以及區(qū)別(一)》,本文關(guān)鍵詞 ASP.NET,小結(jié),之,MVC,MVP,MVVM,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。