Getting Started -By Jon Galloway

 

本章内容

-理解asp.net mvc

-asp.net mvc3的回顾

-如何创建asp.net mvc3的应用程序

-mvc3应用程序的结构

本章会让你对asp.net mvc3有一个简要的认识, 说明了asp.net mvc3的发展历史, 概述了asp.net mvc3的一些新特性以及如何安装开发环境来开发应用。这是关于web框架的第三版的专业系列书籍, 所以我们不打算费太多章节来介绍。我们不想费时间来说服你学习asp.net mvc, 因为你购买了这本书这理由已足够充分, 而事实上证明一个框架和模式的最好方法就是展示如何在实际工作中使用它们。

 

简要认识ASP.NET MVC

asp.net mvc是一个在asp.net框架下运用mvc(model view controller)模式来构建web应用的框架。

mvc在这么多年来在计算机科学中已成为一种重要的构造模式。它最初于1979命名"Thing- Model-View- Editor", 到后来简称为MVC。它的强大和优雅之处在于能够对应用程序进行各层次间的分层解耦(比如分离数据访问逻辑与显示逻辑)特别是对WEB应用。它能让应用程序的结构在不增加过多复杂度的情况下实现职责的层次分离, 这是非常划算的。自从它被推出后已经被使用在很多框架上面。

MVC主要将应用程序(user interface)分成三个部分:

模型:一系列用于描述数据的类(可包含用于操纵改变这些数据的业务规则)

视图:定义用于显示的界面(UI)

控制器:一系列用于处理用户会话, 程序整体及特定逻辑的类。

 

应用于WEB框架的MVC

MVC框架常被应用于web编程, 在asp.net mvc中大致可分为:

模型:这些类的对像不仅可以封装数据库中的数据, 还可以编码以操纵数据及执行特定领域的逻辑。

视图:用于动态生成html的模板。

控制器:主要用于关联模型和视图。响映用户输入, 并将数据封装到模型, 并决定用哪个视图来呈现(如果有)。在asp.net mvc中,该类的命名一般由"Control"作后缀。

 

MVC3之路

短短两年内, asp.net mvc已经发布了几个主要版本和数个临时版本。为了了解mvc3, 就有必要了解下我们是怎样走到这一步的。这一节将讲述asp.net mvc3的各个主要版本的内容和背景。

ASP.NET MVC1概述:

  2007年二月,微软的ScottGu在飞往美国东海岸的会议途中, 构思出了asp.net mvc的核心。这是一个简单的应用程序, 只包含数百行的代码, 但对于微软的web开发者来说它的前景及潜力却是巨大的。

经过了9个预览版之后, ASP.NET MVC 1.0于2009年3月13日正式发布。

 

ASP.NET MVC2概述:

  1年后, 2010年三月MVC2发布了。MVC2增强了部分功能, 不过并没有太大重大的改变, 我认为这印证了asp.net mvc的构造模式能够允许更多的扩展而无需改变其核心。

 

ASP.NET MVC3概述:

  MVC2发布仅10个月,MVC3就发布了。让我们快速地看下MVC3的几个主要功能:

Razor视图引擎

Razor是自asp.net 1.0 发布近十年以来用于渲染html的第一次重大更新。默认用于mvc1,2的视图引擎是web forms视图引擎, 因为它使用和web forms一样的文件(aspx,ascx,master)和语法。它(web forms)能够工作,但其设计目的是用于支持在图形化编辑器中编辑控件。

web froms页面代码:

<%@ Page Language=”C#” MasterPageFile=”~/Views/Shared/Site.Master”
Inherits
=”System.Web.Mvc.ViewPage<MvcMusicStore.ViewModels.StoreBrowseViewModel>
%>
<asp:Content ID=”Content1” ContentPlaceHolderID=”TitleContent” runat=”server”>
Browse Albums
</asp:Content>
<asp:Content ID=”Content2” ContentPlaceHolderID=”MainContent” runat=”server”>
<div class=”genre”>
<h3><em><%: Model.Genre.Name %></em> Albums</h3>
<ul id=”album-list”>
<% foreach (var album in Model.Albums) { %>
<li>
<a href=”<%: Url.Action(“Details”, new { id = album.AlbumId }) %>”>
<img alt=”<%: album.Title %>” src=”<%: album.AlbumArtUrl %>” />
<span><%: album.Title %></span>
</a>
</li>
<% } %>
</ul>
</div>
</asp:Content>

 

Razor是专门为视图引擎设计的语法。它主要用于将模板生成Html代码。下面展示Razor实现同样的页面:

@model MvcMusicStore.Models.Genre

@{ViewBag.Title = “Browse Albums”;}

<div class=”genre”>
<h3><em>@Model.Name</em> Albums</h3>

<ul id=”album-list”>
@foreach (var album in Model.Albums)
{
<li>
<a href=”@Url.Action(”Details”, new { id = album.AlbumId })”>
<img alt=”@album.Title” src=”@album.AlbumArtUrl” />
<span>@album.Title</span>
</a>
</li>
}
</ul>
</div>

Razor具有更好的读写性。它没有像web forms那样类似xml的笨重语法。

下面我们来看看MVC团队设计Razor语法的目的:

紧凑,传神,流动。Razor是一个非常简洁的语法。这不仅在于减少编码(仅管确实如此), 更多的在于表达它的简单性。一个重要的例子就是简单标记和代码之前的转换。在下面的行为中你可以看到在循环中调用对像的属性:

@foreach (var album in Model.Albums)
{
<li>
<a href=”@Url.Action(“Details”, new { id = album.AlbumId })”>
<img alt=”@album.Title” src=”@album.AlbumArtUrl” />
<span>@album.Title</span>
</a>
</li>
}

Razor还简化母版页的标记:Layouts更灵活,需要更少代码的布局。Razor让你能够直观地在模板中使用现存的.net 编码技能。Scott Hanselman在总结他学习Razor的经验就说得很好:

“不用费心去弄清楚它的语法规则, 无需想太多, 只需键入@,并开始编码。这就是Razor。”

易学:正因为Razor不是一门新的语言, 你懂得HTML, .NET然后编写HTML,并在当你需要.NET代码时键入"@"即可。

适用于各种编辑器:Razor非常轻巧和面向html, 你可以自由地选择任何一种编辑器, 你可以使用优秀的Visual Studio(借助于它的语法高亮和智能提示),但Razor足够简单你完全可以使用其它编辑器。

强大的智能提示:在Visual Studio里面, 借助智能提示你能够方便地查看对象的属性。


可单元测试:Razor的核心编译引擎并不依赖于System.Web或其他ASP.NET类库, 它能够由单元测试或命令行直接执行。虽然现在还没有直接的工具支持, 但可以借助像David Ebbo的Visual Studio单文件生成系统将视图编译成类, 之后就可以像其他对象那样加载和测试了。

以上只是简短快速地说明了Razor使得编写视图更简单的原由。其实Razor是很有趣的, 我们将在第三章更详细地介绍。

 

验证机制改进

验证是构建网站的一个重要组成部分, 不过这却是项乏味的工作。我一直在考虑有没一种方法, 能够花尽可能少的时间来写验证而又能使它能够正常工作。MVC2的(attribute)特性驱动验证系统解决了大部分的问题, 只是它只支持为数不多的验证方案。MVC3扩展了对验证的支持, 包含了绝大部分你可能会碰到的验证, 更多的内容将在第六章介绍。

.NET 4 数据验证(Data Annotations)

MVC2基于.NET3.5, 所以并不支持Data Annotations, MVC3基于.NET4, 所以支持一些比较新的, 非常有用的验证功能。比如:

MVC2的DisplayName Attribute没有本地化, 而.Net4中的ComponentModel.DataAnnotations Display attribute则本地化了。

ValidationAttribute 在.Net4中得到了增强。

 

简化验证与改进模型验证

值得一提的是,MVC3支持.Net4的IValidatableObject接口。你可以通过在模型类实现该接口并实现验证方法来为你的实体类扩展验证。如下代码所示:

public class VerifiedMessage : IValidatableObject {
public string Message { get; set; }
public string AgentKey { get; set; }
public string Hash { get; set; }
public IEnumerable<ValidationResult> Validate(
ValidationContext validationContext) {
if (SecurityService.ComputeHash(Message, AgentKey) != Hash)
yield return new ValidationResult(“Agent compromised”);
}
}

 

丰富的JavaScript支持
JavaScript是现代网站不可或缺的一部分, MVC3增加了一些显著的客户端开发支持(整合了Jquery的验证插件), 与当前一些优秀的框架整合。更多的信息请参阅第8章。

Unobtrusive JavaScript(不唐突的JavaScript,JS与HTML抽离的设计概念)

Unobtrusive JavaScript使Html文档更符合它的原意, 文档只包含语义,标签结构,文档属性等, 而不包含JavaScript代码。

MVC3通过两种方式支持Unottrusive JavaScript:

Ajax helpers (比如 Ajax.ActionLink 和 Ajax.BeginForm)来为表单呈现简洁的标记, 并用data attributes和Jquery来控制行为。

Ajax validation(用data attributes代替重复编写验证规则)


JSON Binding

MVC3通过JsonValueProviderFactory支持JSON Binding, 它允许你接收json格式的数据并绑定到实体。这在一些需要发送数据回服务器的ajax场景中十分有用。

 

Dependency Resolution(依赖解析)

MVC3包含一个新的概念叫做"dependency resolver(解析器)", 它使你能够简单地在应用程序中使用依赖注入。这使你更方便地为应用程序的各模块解耦, 使其更具可配置性和测试性。这是一个较大的主题, 我们将在11章讲解。

 

Global Action Filters

MVC3扩展了global action filters, 使其适用于应用程序里的所有action方法。这在错误处理及日志记录方面会很有用。

 

 

ASP.NET MVC3的软件需要:

客户端操作系统:Windows XP,Vista,7

服务器端操作系统:Windows Server 2003,2008,2008 R2

 

 

创建MVC3项目

  1. 新建项目-选择C#-WEB-.Net FrameWork4-选择ASP.NET MVC3 WEB Application, 名称“MvcMusicStore” 点确定。
  2. 接下来选择适用的模板, 视图引擎,是否使用HTML5语义标记,是否创建单元测试 ,点击OK项目就创建好了。

项目模板:The Internet Application template和Empty template的区别在于前者包含了基本的帐户管理功能(ASP.NET Membership)。

 

了解MVC项目的结构

目录 作用
/Controllers 用于存放处理URL请求的控制器类
/Models 用于存放封装操纵数据及业务对象的类
/Views 存放用于展示的UI模板文件,如HTML
/Scripts 存放JavaScript类库或js脚本文件
/Content 存放样式表,图片及其他非动态非脚本文件
/App_Data 存放你用来读写的数据文件







 

 

 

默认的项目结构提供了一个很好的默认目录约定, 你可以用它来让项目结构保持规范。

 

ASP.NET MVC and Conventions(惯例、约定)

ASP.NET项目默认情况下很大程度都依赖于惯例, 这使得开发人员不需要配置太多东西并保持了各个项目的一致性。MVC使用以"惯例"为基础的目录命名结构, 默认情况下,ASP.NET MVC会在Views\[ControllerName]\目录下查找视图模板。

 

Convention over Configuration(惯例优于配置)

ASP.NET 的惯例非常简单, 在你的项目中有如下约定:

  1. 每一个控制器都存在于Controllers目录并以Controller为后缀。(如ProductController、HomeController)
  2. 仅有一个Views目录用于存放项目的视图文件。
  3. 视图的命名及目录是基于其控制器的名称的。例如:上述的ProductController的视图存放于/Views/Product目录。(Views/Shared目录用于存放一些共用的视图模板,如Layout、Error)

 

Conventions Simplify Communication(惯例简化了沟通)

惯例使你能够更清晰地与其他开发人员交流(包括未来的你), 因为ASP.NET MVC中约定成俗的惯例, 别的MVC开发人员能够很简单地读懂你的代码-即使在大型项目。

 

SUMMARY总结

在这一章里面我们涉及了很多方面。介绍了ASP.NET MVC的历史,MVC模式,MVC3的各种新功能并创建了一个项目, 了解了它的结构及约定。在接下来的章节我们将对提到的各个部分进行详细展开。

posted on 2012-03-25 14:16  elycir  阅读(167)  评论(0)    收藏  举报