![]() |
被動MVC 中,與主動MVC的區別在于:
1、模型對視圖和控制器一無所知,它僅僅是被它們使用
2、控制器使用視圖,并通知它更新數據顯示
3、視圖僅僅是在控制器通知它去模型取數據的時候它才這么做(視圖并不會訂閱或監視模型的更新)
3.3. Web應用中的MVC框架
Web中的MVC框架都是被動MVC模式,因為web應用中, 由于http是基于請求和響應方式協同工作的,因此當服務器端的model(數據)發生變化時,它不會立即更新客戶端的view,只有客戶端重新請求或刷新頁面時才更新.
下圖是典型的MVC框架中的MVC一個請求流程。
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與邏輯分離(界面與代碼分離)。
引自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的缺點
完美的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。