ASP.NET MVC Framework与WCSF中MVP模式之小小比较

简介:

概述

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>
在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>

Controller和Presenter

ASP.NET MVC Framework中,一个View在整个应用程序中可以被多个Controller所调用。
public class PostController : Controller
{
    [ControllerAction]
    public void New()
    {
        RenderView("New");
    }
}
public class BlogController : Controller
{
    [ControllerAction]
    public void New()
    { 
        RenderView("New");
    }
}
MVP中一个View在整个应用程序中只对应一个特定的Presenter:
public partial class Products_ProductDetail : Page, IProductDetail
{
    private ProductDetailPresenter _presenter;
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!this.IsPostBack)
        {
            this._presenter.OnViewInitialized();
        }
        this._presenter.OnViewLoaded();
    }
    [CreateNew]
    public ProductDetailPresenter Presenter
    {
        set
        {
            this._presenter = value;
            this._presenter.View = this;
        }
    }
}

对开发过程的影响

在ASP.NET MVC Framework中,采用行内代码进行数据呈现,逻辑集中在Controller中,但是View无法完全交给UI设计人员完成。在MVP模式中,所有的业务逻辑交给Presenter去处理,这样View中代码就变得及其简洁,将可以轻易的把开发人员和UI设计人员分开,如下图所示:
 

对单元测试的支持

在单元测试方面的支持,ASP.NET MVC Framework在出现的时候就讲促进清晰的关注分离,可测试性和TDD。MVC Framewrok中的所以核心契约都是基于接口的,可以轻易地通过Mock来模拟。可以不用在ASP.NET进程中运行控制器,就能进行单元测试。同时可以使用你想使用的任何单元测试框架来做单元测试,包括NUnit, MBUnit, MS Test等等。
MVP模式的出现,在一定程度上是为了便于UI的单元测试。由于所有的处理都放在了Presenter中,View中的代码变得及其干净简单,所以可以很方便的进行单元测试,Web Client Software Factory中,提供了自动化项目指导包,可以直接创建测试项目。

结束语

对于ASP.NET MVC Framework和WCSF中的MVP模式之小小比较,到这里就结束了,不管是ASP.NET MVC Framework还是WCSF中的MVP模式,都是非常优秀的模型,值得我们更进一步去研究。
















本文转自lihuijun51CTO博客,原文链接:http://blog.51cto.com/terrylee/67770 ,如需转载请自行联系原作者



相关文章
|
5月前
|
API C++ Windows
Visual C++运行库、.NET Framework和DirectX运行库的作用及常见问题解决方案,涵盖MSVCP140.dll丢失、0xc000007b错误等典型故障的修复方法
本文介绍Visual C++运行库、.NET Framework和DirectX运行库的作用及常见问题解决方案,涵盖MSVCP140.dll丢失、0xc000007b错误等典型故障的修复方法,提供官方下载链接与系统修复工具使用指南。
1177 2
|
8月前
|
C++ Windows
.NET Framework安装不成功,下载`NET Framework 3.5`文件,Microsoft Visual C++
.NET Framework常见问题及解决方案汇总,涵盖缺失组件、安装失败、错误代码等,提供多种修复方法,包括全能王DLL修复工具、微软官方运行库及命令行安装等,适用于Windows系统,解决应用程序无法运行问题。
1185 3
|
5月前
|
开发框架 安全 .NET
Microsoft .NET Framework 3.5、4.5.2、4.8.1,适用于 Windows 版本的 .NET,Microsoft C Runtime等下载
.NET Framework是Windows平台的开发框架,包含CLR和FCL,支持多种语言开发桌面、Web应用。常用版本有3.5、4.5.2、4.8.1,系统可同时安装多个版本,确保软件兼容运行。
1166 0
Microsoft .NET Framework 3.5、4.5.2、4.8.1,适用于 Windows 版本的 .NET,Microsoft C Runtime等下载
|
6月前
|
C++
提示缺少.NET Framework 3.5 安装错误:0x80070002、0x800F0950\0x80004002
.NET Framework常见问题及解决方法汇总,
762 0
|
8月前
|
C++ Windows
WindowsDLL修复专家,MSVCP**、DLL修复vcruntime**、DLL修复、`.Net Framework`缺失、DirectX类DLL修复、VC运行库修复
Windows DLL修复专家是一款专为解决因DLL文件缺失、版本错误导致的软件或游戏无法运行问题的系统工具。它支持一键扫描和修复各类DLL异常,涵盖MSVCP、vcruntime、.NET Framework、DirectX等多种常见问题。具备自动检测、备份还原功能,确保修复过程安全可靠。适用于软件报错、系统异常及新系统适配场景,降低用户手动修复门槛,提升系统稳定性与兼容性。
327 3
|
7月前
.NET Framework 3.5离线安装包合集下载
本文介绍了如何获取和安装.NET Framework运行库离线合集包。用户可通过提供的链接下载安装包,安装过程简单,按提示逐步操作即可完成。安装时可选择所需版本,工具会自动适配架构,无需手动判断,方便高效。
5606 0
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
574 0
|
存储 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(五)
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情等功能的开发,今天继续讲解购物车功能开发,仅供学习分享使用,如有不足之处,还请指正。
409 0
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
316 0