VC(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>
在MVP中,仍然采用WebForm模型,其中View分为View接口和View实现两部分,实现部分可以是ASP.NET页面、用户控件或者母版页:
public interface IProductDetail
{
string Name { set;}
string Brand { set;}
}
public partial class Products_ProductDetail : Page, IProductDetail
{
}
使用服务器控件进行呈现(也可以是HTML控件):
<asp:Content ID="content" ContentPlaceHolderID="DefaultContent" Runat="Server">
<h1>ProductDetail</h1>
<p>名称:<asp:Label ID="lbl_Name" runat="server" Text=""></asp:Label></p>
<p>品牌:<asp:Label ID="lbl_Brand" runat="server" Text=""></asp:Label></p>
</asp:Content>
文章转载自网管网:http://www.bitscn.com/pdb/dotnet/200904/160669.html