新作《ASP.NET MVC 4框架揭秘》正式出版

22938491-1_e本人历时近1年写的书《ASP.NET MVC 4框架揭秘》(电子工业出版社“博文视点”)于世界末日前得以出版,目前互动出版网已经开始接受预订。本书不是一本介绍ASP.NET MVC的入门书籍,它针对最新版本的ASP.NET MVC 4,深入剖析底层框架从请求接收到响应回复的整个处理流程(包括URL路由、Controller的激活、Model元数据的解析、Model的绑定、Model的验证、Action的执行、View的呈现和ASP.NET Web API等),并在此基础上指导读者如何通过对ASP.NET MVC框架本身的扩展解决应用开发中的实际问题。

ASP.NET MVC是一个建立在ASP.NET平台上基于MVC模式的Web开发框架,它提供了一种与传统Web Form完全不同的Web应用开发方式。ASP.NET Web Form借鉴了Windows Form基于控件和事件注册的编程模式,使Web应用的开发变得简单而快捷,但是它却使开发人员与Web的本质渐行渐远。ASP.NET MVC是一种回归,它使开发人员可以真正地面向Web进行编程,我们面对的不再是拖拉到Web页面的控件,而是整个HTTP请求和响应的流程。

这不是一本ASP.NET MVC入门书籍

个人觉得掌握ASP.NET MVC具有三个层次。了解基本的编程模式,掌握Controller和View的定义方式,知道路由如何注册以及验证规则如何定义,此为第一层次。第二个层次要求我们对ASP.NET MVC框架本身从请求接收到响应回复的整个流程具有一个清晰的认识,这包括请求如何被路由、目标Controller如何被激活、Model元数据如何被解析、Action方法如何被执行,View如何呈现等。ASP.NET MVC本身是一个极具可扩展的开发框架,合理利用其扩展性可以解决很多开发中的实际问题,而掌握ASP.NET MVC的最高层次就是凭着对框架本身的运行机制的了解准确地找到相应的扩展点,并创建相应的扩展来解决我们遇到的问题。本书不是一本ASP.NET MVC入门书籍,而是让处于第一次层次的读者快速进入第二和第三层次的书。

这是一本讲述ASP.NET MVC框架本质的书

很多.NET开发人员都在抱怨微软开发技术过快的更新频率让他们无所适从。其实他们看到的只是单纯的版本升级而已,一些本质的东西一直是“稳定”的。微软推出.NET战略已经十多年了,CLR却只有四个版本而已。最新版本的ASP.NET虽然表面上已经看不到太多最初的影子,但是整个请求处理的管道一直未曾改变。对于一项开发技术,只要我们了解了它最根本性的一些东西,不但不应该惧怕其高频率的版本更替,而应该热烈拥抱它。本书力求将关于ASP.NET MVC框架最根本的东西带给大家,而不是罗列一些简单的编程技巧。

这是一本”实用”的书

可能有人觉得这本剖析ASP.NET MVC框架运行原理的书没有什么“实际”的意义,因为我们每天的日常工作就是编程,知道了ASP.NET MVC从请求接收到响应回复之间整个处理流程并不会对我们的工作造成实质性的改变。其实这种想法是极端错误的,因为我们编写的程序最终是在ASP.NET MVC框架上运行的,程序的高效性决定于它是否能够最大限度地“迎合”框架的运行机制,所以了解ASP.NET MVC框架的运行原理有利于我们写出高质量的程序。

我个人将基于ASP.NET MVC的编程分为两类,即“面向业务编程“和“面向框架的编程”。前者根据具体的业务逻辑定义Controller和设计View,这是大部分Web开发人员的主要工作;后者则是为整个Web应用搭建一个框架,让最终的开发人员只需要关注与具体的业务逻辑,而让框架来完成所有与业务无关的部分。对于后者,我们可以充分利用ASP.NET MVC的扩展性,通过自定义的扩展来将非业务的功能自动“注入”到业务逻辑的处理流程中 ,这样不仅可以提高开发效率还能提高开发质量。本书在剖析ASP.NET MVC框架运行机制过程中几乎列出了其所有的扩展点,并且通过实例演示的形式提供了很多实用的扩展。

可以将本书视为一本“架构设计”的书

在我的周围存着这样的一些人,他们以刚毕业一两年的毕业生为主。他们大都工作勤奋、聪明好学,手中经常捧着GoF的《设计模式》,总是希望在将书中的设计模式应用到具体项目之中, 或者希望通过项目的实践来印证他们在书本上的设计模式,但是理论和实践之间的距离总让他们感到困惑。

要从真实的项目或者产品中学习“实用”的软件架构设计知识,先得确定目标项目或者产品中采用的架构思想和设计模式是正确的,而我们参与的很多项目其实被“架构”得一塌糊涂。对于像ASP.NET这样的产品,其基础架构能够在很长一段时间内保持不变,本身就证明了应用在上面的架构设计的正确性,它们不正是我们学习架构设计最好的素材吗?本书对ASP.NET MVC框架的运行机制进行了深入剖析,实际上是将ASP.NET MVC的整个设计展示在读者面前,读者朋友们也许可以将本书作为一本“架构设计”的书来读。

本书的写作特点

我想本书的读者可能很多都读过我的《WCF全面解析》。虽然内容不同,本书却可能看成是它延续,因为它们基本上采用了相同的写作手法。总的来讲我基本上采用“原理讲述、代码分析和实例证明”这个模式来介绍某个技术要点,对于一个具体的知识点,我不仅仅会告诉读者“是什么”,还会告诉读者“为什么”,以及“如何证明是这样”。除此之外,如果某个知识点在真实的项目开发中具有“实用”价值,我一般会给出一个相关的实例演示。

本书具有一个与其他中文原创或者翻译书籍截然不同的特点,那就是几乎所有的术语都采用英文,比如Controller、Model和View在本书中并没有翻译成中文“控制器”、“模型”和“视图”。因为我认为很多术语其实很难找到一个语义完全等同的中文词组或短语与之对应,对于习惯了英文作为“开发语言”的读者来说,强行翻译其实是不必要的。

这不是一本纯理论的书,而是一本“实证型”的书,在书中提供了110个可供单独下载的实例演示。这些实例在本书中具有不同的作用,有的是为了探测和证明对应的论点,有的是为了演示某种使用的编程技巧,有的直接就是一个完整的案例。

本书读者

我们说《ASP.NET MVC框架揭秘》不是一本ASP.NET MVC入门书籍,主要是因为本书在第一章并没有提供一个“Hello World”实例,关注重点主要落在ASP.NET MVC框架本身的运行机制上面,但是并不是说本书的读者需要预先对ASP.NET MVC具有多深入的认识才行。如果读者对ASP.NET MVC基本的编程模式具有一定的了解,读懂这本书是完全没有问题的。对于从未接触过ASP.NET MVC的.NET开发人员,可以通过官方网站(http://www.asp.net/mvc)来学习ASP.NET MVC。

目录


第1章  ASP.NET + MVC    1
1.1.    传统MVC模式    2
1.1.1.    自治视图    2
1.1.2.    什么是 MVC模式?    2
1.2.    MVC的变体    4
1.2.1.    MVP    4
1.2.2.    Model 2    11
1.2.3.    ASP.NET MVC与Model 2    12
1.3.    IIS/ASP.NET管道    13
1.3.1.    IIS 5.x与ASP.NET    13
1.3.2.    IIS 6.0与ASP.NET    14
1.3.3.    IIS 7.0与ASP.NET    16
1.3.4.    ASP.NET管道    19
1.4.    ASP.NET MVC是如何运行的?    23
1.4.1.    建立在“迷你版” ASP.NET MVC上的Web应用    23
1.4.2.    URL路由    25
1.4.3.    Controller的激活    29
1.4.4.    Action的执行    32
本章小结    36
第2章 URL路由    37
2.1.    ASP.NET路由系统    38
2.1.1.    请求URL与物理文件的分离    38
2.1.2.    实例演示:通过URL路由实现请求地址与.aspx页面的映射(S201)    38
2.1.3.    Route与RouteTable    41
2.1.4.    路由映射    46
2.1.5.    根据路由规则生成URL    54
2.2.    ASP.NET MVC扩展    55
2.2.1.    路由映射    55
2.2.2.    实例演示:注册路由映射与查看路由信息(S208)    57
2.2.3.    缺省URL参数    59
2.2.4.    基于Area的路由映射    60
2.2.5.    链接和URL的生成    65
2.3.    动态HttpHandler映射    70
2.3.1.    UrlRoutingModule    71
2.3.2.    PageRouteHandler 与MvcRouteHandler    72
2.3.3.    ASP.NET路由系统扩展    73
本章小结    77
第3章 Controller的激活    78
3.1.    总体设计    79
3.1.1.    Controller    79
3.1.2.    ControllerFactory    83
3.1.3.    ControllerBuilder    85
3.1.4.    Controller的激活与URL路由    90
3.2.    默认实现    92
3.2.1.    Controller类型的解析    92
3.2.2.    Controller类型的缓存    95
3.2.3.    Controller的释放和会话状态行为的控制    96
3.3.    IoC的应用    97
3.3.1.    从Unity来认识IoC    98
3.3.2.    Controller与Model的分离    100
3.3.3.    基于IoC的ControllerFactory    101
3.3.4.    基于IoC的ControllerActivator    106
3.3.5.    基于IoC的DependencyResolver    107
本章小结    110
第4章 Model元数据的解析    111
4.1.    Model元数据及其定制    112
4.1.1.    Model元数据层次化结构    112
4.1.2.    基本Model元数据信息    113
4.1.3.    Model元数据的定制    116
4.1.4.    IMetadataAware接口    128
4.2.    Model元数据与Model模板    132
4.2.1.    实例演示:通过模板将布尔值显示为RadioButton(S409)    133
4.2.2.    预定义模板    134
4.2.3.    DataTypeName与模板名称    142
4.2.4.    模板的获取与执行    145
4.2.5.    实例演示:通过定制Model元数据和自定义模板实现预定义列表的呈现(S412)    148
4.3.    Model元数据的提供机制    155
4.3.1.    再谈ModelMetadata    156
4.3.2.    ModelMetadataProvider    159
4.3.3.    Model元数据提供系统的扩展    163
本章小结    164
第5章  Model绑定    166
5.1.    ControllerDescriptor、ActionDescriptor与ParameterDescriptor    167
5.1.1.    ControllerDescriptor    167
5.1.2.    ActionDescriptor    171
5.1.3.    ParameterDescriptor    175
5.2.    ValueProvider    177
5.2.1.    NameValueCollectionValueProvider    178
5.2.2.    DictionaryValueProvider    184
5.2.3.    ValueProviderFactory    190
5.2.4.    ValueProviderFactories    191
5.3.    ModelBinder    194
5.3.1.    ModelBinder与ModelBinderProvider    194
5.3.2.    ModelState与Model绑定    201
5.3.3.    ModelBindingContext的创建    205
5.4.    Model绑定的默认实现    206
5.4.1.    简单类型    206
5.4.2.    复杂类型    210
5.4.3.    数组    215
5.4.4.    集合    222
5.4.5.    字典    224
本章小结    228
第6章 Model的验证    229
6.1.    ModelValidator与ModelValidatorProvider    230
6.1.1.    ModelValidator    230
6.1.2.    ModelValidatorProvider    233
6.1.3.    ModelValidatorProviders    237
6.2.    Model绑定与验证    242
6.2.1.    ModelState    242
6.2.2.    验证消息的呈现    245
6.2.3.    Model绑定中的验证    251
6.3.    基于数据注解特性的Model验证    255
6.3.1.    ValidationAttribute特性    255
6.3.2.    DataAnnotationsModelValidator    261
6.3.3.    DataAnnotationsModelValidatorProvider    263
6.3.4.    将ValidationAttribute应用到参数上    266
6.3.5.    一种Model类型,多种验证规则    271
6.4.    客户端验证    277
6.4.1.    jQuery验证    277
6.4.2.    基于jQuery的Model验证    281
6.4.3.    自定义验证    284
本章小结    287
第7章 Action的执行    288
7.1.    异步Action的定义    289
7.1.1.    基于线程池的请求处理机制    289
7.1.2.    两种异步Action方法的定义    290
7.1.3.    AsyncManager    292
7.2.    Action方法的执行    297
7.2.1.    MvcHandler对请求的处理    297
7.2.2.    Controller的执行    297
7.2.3.    ActionInvoker的执行    298
7.2.4.    ControllerDescriptor的同步与异步    302
7.2.5.    ActionDescriptor的执行    305
7.3.    筛选器的执行    311
7.3.1.    Filter及其提供机制    311
7.3.2.    AuthorizationFilter    319
7.3.3.    ActionFilter    328
7.3.4.    ExceptionFilter    333
7.3.5.    实例演示:集成EntLib实现自动化异常处理(S713、S714、S715)    335
7.3.6.    ResultFilter    348
本章小结    349
第8章 View的呈现    350
8.1.    ActionResult    351
8.1.1.    EmptyResult    351
8.1.2.    ContentResult    352
8.1.3.    FileResult    357
8.1.4.    JavaScriptResult    361
8.1.5.    JsonResult    364
8.1.6.    HttpStatusCodeResult    366
8.1.7.    RedirectResult/RedirectToRouteResult    367
8.2.    ViewResult与ViewEngine    369
8.2.1.    View引擎中的View    369
8.2.2.    ViewEngine    370
8.2.3.    ViewResult的执行    373
8.3.    Razor引擎    379
8.3.1.    View的编译原理    380
8.3.2.    WebViewPage与WebViewPage<TModel>    384
8.3.3.    RazorView    387
8.3.4.    RazorViewEngine    395
本章小结    399
第9章 ASP.NET Web API    400
9.1.    Web、REST与Web API    401
9.1.1.    Web如此简单    401
9.1.2.    REST是什么?    402
9.1.3.    ASP.NET Web API    404
9.2.    服务端管道    412
9.2.1.    ASP.NET Web API管道式设计    413
9.2.2.    HttpMessageHandler    414
9.2.3.    HttpServer    417
9.2.4.    实例演示:自定义HttpMessageHandler实现HTTP方法重写(S903)    422
9.3.    HttpControllerDispatcher    423
9.3.1.    HttpController的激活    424
9.3.2.    HttpController的执行    435
9.3.3.    Action的选择    436
9.3.4.    Model元数据的解析    442
9.3.5.    Action参数绑定    444
9.3.6.    Model验证    456
9.3.7.    Action的执行与结果的响应    460
9.4.    Web API的调用和自我寄宿    463
9.4.1.    HttpClient    463
9.4.2.    HttpSelfHostServer    468
本章小结    471
第10章  案例实践    473
10.1.    功能性简介    474
10.1.1.    商品列表的呈现    474
10.1.2.    定购商品    475
10.1.3.    登录与错误页面    476
10.2.    设计概述    477
10.2.1.    Controller-Service-Repository    477
10.2.2.    IoC的应用    481
10.2.3.    AOP的应用    483
10.2.4.    异常处理    489
10.3.    编程实现    490
10.3.1.    数据表的创建    490
10.3.2.    Repository    491
10.3.3.    Service    495
10.3.4.    路由注册和布局    498
10.3.5.    ProductController    500
10.3.6.    OrderController    507
10.3.7.    AccountController    512
本章小结    515

posted @ 2012-12-18 19:40  Artech  阅读(39138)  评论(453编辑  收藏  举报