《ASP.NET MVC 4 实战》----1.2 ASP.NET MVC是什么

简介: ASP.NET MVC为在.NET平台上构建Web应用程序的Web Form提供了一个替代品。它是微软在2007年11月第一次披露的,现在已有四个主要版本。第三版,即ASP.NET MVC 3,发布于2011年1月,是第一个依赖于.NET 4的ASP.NET MVC版本。

本节书摘来自异步社区《ASP.NET MVC 4 实战》一书中的第1章,第1.2节,作者: 【美】Jeffrey Palermo , 【美】Jimmy Bogard , 【美】Eric Hexter , 【美】Matthew Hinze , 【英】Jeremy Skinner,译者: 徐燕萍 , 李萍 , 林逸 , 更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.2 ASP.NET MVC是什么

ASP.NET MVC 4 实战
ASP.NET MVC为在.NET平台上构建Web应用程序的Web Form提供了一个替代品。它是微软在2007年11月第一次披露的,现在已有四个主要版本。第三版,即ASP.NET MVC 3,发布于2011年1月,是第一个依赖于.NET 4的ASP.NET MVC版本。ASP.NET MVC 4可以与.NET 4以及.NET 4.5一起工作,此刻尚未正式发布(ASP.NET MVC 4在本书出版时还只是预览版—译者注)。

MVC代表模型-视图-控制器(Model-View-Controller),这是一种在Web开发领域非常流行的设计模式。

作为Web Form的一个替代品,在构造Web应用程序时,ASP.NET MVC采用了一种不同的方法。这意味着你不必处理ASPX页面和控件、回递或视图状态,或复杂的事件生命周期。相反,你要定义控制器、动作以及视图。然而,底层的ASP.NET平台是相同的,因此,HTTP处理程序和HTTP模块等仍然适用,而且,你可以在同一个应用程序中混合使用MVC和Web Form页面。ASP.NET Web Form和ASP.NET MVC都并驾于核心的ASP.NET平台之上,如图1.2所示。


6b07a3fcd8cab976df2b13d211e8ca84a3adca17

ASP.NET Web Pages

在图1.2所示中,你可能已经注意到位于ASP.NET核心之上的第三种基于ASP.NET的技术― ASP.NET Web Pages(也叫作ASP.NET Web页面—译者注)。

ASP.NET Web Pages是与ASP.NET MVC 3同一时间发布的,它是为期望学习使用ASP.NET平台的新手而设计的,并作为Web Form与MVC的一种更简单的替代品。它也适用于十分简单的网站,在这种场合下,不必使用成熟的MVC应用程序。它与ASP.NET MVC共享了许多技术,这些技术使新开发人员易于将使用ASP.NET Web Pages所学到的技能转换到MVC场合。

虽然ASP.NET Web Pages项目可以在Visual Studio中开发,但微软还是发布了一个简化的IDE,叫作WebMatrix。它提供了一种更精简的开发体验,以便完全专注于Web开发,而不需要Visual Studio的高级特性。尽管WebMatrix本身超出了本书的范围,但一些与ASP.NET Web Pages相关的技术,在本书的许多例子中将起重要作用。这包括Razor模板引擎,它是一种也由ASP.NET MVC使用的、通过使用C#或VB.NET生成HTML的新方式。
本书将涉及ASP.NET MVC框架的所有主要特性。以下是你将了解到的一些好处:


6d1af341741e95d03f42f07ec9462b02470805fd

随着本书的展开介绍,这些好处会变得越为清晰。而现在,我们将简要考察建立该框架的底层模式。为什么要用MVC?它从哪里来的呢?

1.2.1 MVC模式

“模型-视图-控制器” (Model-View-Controller)模式起源于20世纪70年代的Smalltalk开发社区—尽管它是2003年随着Ruby on Rails的出现才在Web上流行使用的。

MVC模式有三个部分:

boll 模型(Model)—建立软件所围绕的主域(这种模型称为“主域模型”,或简称“域模型”—译者注)。如果你正在建立一个博客,则模型可能是帖子和评论。在某些上下文中,术语“模型”可能是指视图专用的模型(这种模型称为“视图模型”—译者注)—专用于在用户界面上显示的模型。

boll 视图(View)—模型的可视化表示。它通常是框架渲染给浏览器的结果标记,比如表现博客帖子的HTML。

boll 控制器(Controller)—提供视图和模型之间关联的协调程序。控制器负责处理输入、对模型进行操作,并决定执行哪一个动作,如渲染一个视图,或重定向到另一个页面。仍以博客为例,控制器可能要找出一篇帖子的最新评论(模型),并将它们传递给视图进行渲染。

图1.3展示了这三个组件是如何关联的。控制器接受用户输入,构造适当的模型,然后将其传递给视图。控制器和视图对模型都有依赖性,但模型本身对控制器和视图是一无所知的。

图像说明文字


4a97bc0452b374651113f4bbe5744448bbc5f228

ASP.NET MVC不是.NET框架上第一个实现MVC模式的。开源的MonoRail框架,最初的灵感来自于Ruby on Rails,2005年将MVC范例带到了.NET的Web开发。今天的ASP.NET MVC中仍可以看到它的许多影子。

另外,除ASP.NET MVC和MonoRail之外,现在.NET平台上还有其他几个MVC风格的框架。这些框架包括:FubuMVC(http://mvc.fubu-project.org/) ,这是一个开源的约定驱动式框架;OpenRasta (http://openrasta.org ),这是另一个开源项目,其目标是基于资源与HTTP方法的概念来建立Web应用程序与服务。

通过利用MVC模式,ASP.NET MVC提供了几个优于ASP.NET Web Form的好处。

1.2.2 ASP.NET MVC的好处

ASP.NET MVC解决了ASP.NET Web Form的许多缺点。当在.NET平台上开发新的应用程序时,这使ASP.NET MVC成为一种更好的选择。

与协议更接近
ASP.NET Web Form试图完全隐藏HTTP的无状态本质,而ASP.NET MVC却不是。通过采纳MVC模式,并将一个HTTP请求映射成一个方法调用,ASP.NET MVC为许多具有Web开发背景的人提供了更加熟悉的开发体验。其模型也彻底被简化—Web Form的那种复杂的页面生命周期不存在了,而且HTTP上的抽象是最小限度的。

关注分离
ASP.NET Web Form将用户界面与其后台代码紧密地耦合在一起,而ASP.NET MVC却是鼓励将用户界面(视图)与驱动界面的代码(控制器)保持分离的一种设计方式。如果实现良好,便意味着开发人员更易于理清应用程序的脉络,也使应用程序更易于维护—对控制器的修改不一定意味着也必须修改用户界面。

可测试性
通过将应用逻辑从用户界面中分离出来,ASP.NET MVC更易于独立地测试个别组件。可以测试控制器类,而不必测试实际的用户界面(意即,控制器与界面的测试是可以分开进行的―译者注)。与Web Form不同,MVC控制器对完全不可测试的HttpContext类没有直接的依赖性,而只是依赖于抽象,这使得编写出自动化的单元测试要容易得多。

现在,你已经看到了ASP.NET MVC的一些好处,以下将简要探讨该框架第三版的新特性。

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

相关文章
|
4月前
|
开发框架 前端开发 JavaScript
盘点72个ASP.NET Core源码Net爱好者不容错过
盘点72个ASP.NET Core源码Net爱好者不容错过
75 0
|
4月前
|
开发框架 .NET
ASP.NET Core NET7 增加session的方法
ASP.NET Core NET7 增加session的方法
38 0
|
16天前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
22 0
|
2月前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
32 0
|
2月前
|
开发框架 中间件 .NET
C# .NET面试系列七:ASP.NET Core
## 第一部分:ASP.NET Core #### 1. 如何在 controller 中注入 service? 在.NET中,在ASP.NET Core应用程序中的Controller中注入服务通常使用<u>依赖注入(Dependency Injection)</u>来实现。以下是一些步骤,说明如何在Controller中注入服务: 1、创建服务 首先,确保你已经在应用程序中注册了服务。这通常在Startup.cs文件的ConfigureServices方法中完成。例如: ```c# services.AddScoped<IMyService, MyService>(); //
78 0
|
2月前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
110 5
|
4月前
|
SQL 开发框架 JavaScript
分享33个ASP.NET电子商务源码和40个ASP.NET控件组件源码,总有一款适合您
分享33个ASP.NET电子商务源码和40个ASP.NET控件组件源码,总有一款适合您
32 0
|
4月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
46 0
|
9月前
|
存储 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(五)
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情等功能的开发,今天继续讲解购物车功能开发,仅供学习分享使用,如有不足之处,还请指正。
124 0
|
10月前
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
67 0