概述
MVC模式已經出現了幾十年了,在GUI領域已經得到了廣泛的應用,由於微軟ASP.NET MVC Framework的出現,致使MVC一度成為.NET 社區的熱名話題。作為MVC的變種MVP模式,也已經出現好幾年了,在微軟模式與實踐小組提供的Web Client Software Factory中,給出了實現 MVP模式的應用程序最佳實踐,本文將試著對這兩種實現比較一二。
MVC(Model-View-Controller,模型-視圖-控制器)模式是80年代 Smalltalk-80出現的一種軟件設計模式,後來得到了廣泛的應用,其主要目的在於促進應用中模型,視圖,控制器間的關注的清晰分離。MVP( Model-View-Presenter,模型-視圖-表示器)模式則是由IBM開發出來的一個針對C++和Java的編程模型,大概出現於2000年,是MVC模式的一個 變種,主要用來隔離UI、UI邏輯和業務邏輯、數據。在下面的文字中,如無特別說明,MVC均指ASP.NET MVC Framework。
處理流程
對於處理流程方面兩者的區別,用下面這兩幅圖就可以說明一切:
圖1:Model-View-Controller
圖2:Model-View-Presenter
處理流程方面,在MVC 中,用戶的請求首先會到達Controller,由Controller從Model獲取數據,選擇合適的View,把處理結果呈現到View上;在MVP中,用戶的請求 首先會到達View,View傳遞請求到特定的Presenter,Presenter從Model獲取數據後,再把處理結果通過接口傳遞到View。
View區別
ASP.NET MVC Framework中的View可以是一個ASP.NET頁面、用戶控件或者是母版頁。需要分別s繼承於ViewPage、ViewUserControl、 ViewMasterPage。示例代碼:
public partial class Views_Blog_New : ViewPage
{
}
采用行內代 碼進行數據的呈現,當然也可以使用服務器控件,示例代碼:
<h2>ASP.NET MVC Framework Sample</h2>
<hr />
<%=Html.ActionLink("Home", "Index")%> |
<%=Html.ActionLink("New Post", "New")%>
<div>
<%foreach (Post post in ViewData)
{ %>
<div class="postitem">
<strong>Title</strong>:<%=Html.Encode(post.Title) % ></br>
<strong>Author</strong>:<%=Html.Encode(post.Author) %></br>
<strong>PubDate</strong>:<%=Html.Encode(post.PubDate.ToShortDateString()) %></br>
<strong>Content</strong>:<%=Html.Encode(post.Description) %></br>
<% =Html.ActionLink("Edit", new {action="Edit", Id=post.Id })%>
</div><br />
<% } %>
</div>