Real World ASP.NET MVC
Upcoming SlideShare
Loading in...5
×
 

Real World ASP.NET MVC

on

  • 12,519 views

Slides of my session (DEV 343) at TechEd 2009

Slides of my session (DEV 343) at TechEd 2009

Statistics

Views

Total Views
12,519
Views on SlideShare
9,308
Embed Views
3,211

Actions

Likes
9
Downloads
384
Comments
2

25 Embeds 3,211

http://www.cnblogs.com 2269
http://www.techgig.com 447
http://blog.zhaojie.me 399
http://www.slideshare.net 52
http://www.zhuaxia.com 12
http://blog.zdnet.com.cn 5
http://zhuaxia.com 4
http://reader.youdao.com 2
http://www.iweb34.com 2
http://localhost 2
http://static.slidesharecdn.com 2
http://222.92.117.56 2
http://www.haogongju.net 1
https://ssl.nowall.be 1
http://www.galpir.lviv.ua 1
http://blog.knowsky.com 1
http://uncasing12.rssing.com 1
http://m.cnblogs.com 1
http://cache.baidu.com 1
http://douzhanshen.net 1
http://notelocal.sdo.com 1
http://blog.rorowo.com 1
http://xianguo.com 1
http://wap.cnblogs.com 1
http://www.newsblur.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Real World ASP.NET MVC Real World ASP.NET MVC Presentation Transcript

  • DEV343 基于ASP.NET MVC框架的实战 赵劼(jeffz@live.com) 架构师 上海柏盛网络技术有限公司
  •  赵劼  程序员  语言爱好者  半职业博客写手(http://www.cnblogs.com/JeffreyZhao/)  技术方向:  函数式编程  并行程序开发  代码之美  希望给初学者以合适指导,坚定的恶劣培训机构反对者
  •  永恒的话题:ASP.NET MVC vs. WebForms  ASP.NET MVC项目典型结构  控制器,选择器,过滤器——各司其职  灵活的路由规则  强大的视图引擎  关注可测试性  ASP.NET MVC 2的新功能概览
  • MVC WebForms V Page ASP.NET 表现模型 C M Code Behind Caching Globalization Membership … ASP.NET 基础模型 HttpContext HttpRequest HttpResponse …
  • 细节、控制、灵活 WebForms ASP.NET MVC 大量可复用控件 认证 容易扩展(DIY) 成熟的状态管理 缓存 良好的职责分离 可视化设计支持 路由 易于测试 … … … 复用、模型、快速开发
  •  微软为什么要提供ASP.NET MVC?  WebForms被放弃了吗?  作为开发人员该如何选择?  ……
  • 视图 View 表现层 控制器 视图模型 Controller View Moel 其他业务对象 业务逡辑层 领域模型 Business Objects Domain Model
  •  为表现层而设计的Model  由控制器创建,视图使用  视图和控制器的调和剂 视图 读取 视图模型 创建 控制器
  • MyMvcApp.Web.UI 表现层 ? MyMvcApp.Web.Models MyMvcApp.Web.Controllers MyMvcApp.Models 业务逡辑层 MyMvcApp.Business
  • 演 示 ASP.NET MVC项目的典型结构
  •  URL Routing:从URL中提取数据,通过数据构建URL  Action Selector:选择待执行的Action  Action Filter:Action执行的前/后置功能  Model Binder:生成Action参数  Action:处理请求的逻辑主体,生成数据  Action Result:向客户端呈现结果
  • URL Routing Action Selector Action Filter Model Binder Action Result 回复(Response) HTTP/1.1 304 Not Modified 请求(Request) Date: Sun, 04 Oct 2009 19:36:25 GMT Server: Microsoft-IIS/7.0 GET /api/products/1234 HTTP 1.1 Last-Modified: Fri, 02 Oct 2009 16:47:31 GMT Host: www.example.com Etag: "600028c-59fb-474f6852c9dab" User-Agent: XYZ 1.1 Cache-Control: max-age=300 Accept: text/xml Vary: Accept-Encoding Keep-Alive: 300 Content-Encoding: gzip Connection: keep-alive Content-Length: 7160 If-Modified-Since: Fri, 02 Oct 2009 16:47:31 GMT Content-Type: text/xml If-None-Match: "600028c-59fb-474f6852c9dab" Cache-Control: max-age=60 <?xml version=‘1.0’ encoding=‘utf-8’ ?> ...
  • 演 示 充分利用各组件构建RESTful API
  •  可替换的视图引擎  WebForms(默认)  Spark,NVelocity,Brail,etc.  基于WebForms页面的视图引擎  Layout,View,Partial View一应俱全  IDE支持良好  性能极高  易于扩展  可以替换为Ruby,Python,F#等多种语言
  • <h2>Articles: </h2> <% Model.Articles.ForEach(article => { %> <p><%= Html.Encode(article.Title) %></p> <% } %> protected override void Render(HtmlTextWriter writer) { ... literal1.Render(writer); Model.Articles.ForEach(article => { literal2.Render(writer); writer.Write(Html.Encode(article.Title)); literal3.Render(writer); }); ... }
  •  对WebForms标记的厌恶  限制视图能力,避免滥用  使用更容易令人接受的标记语言  ……
  • <content name="TitleContent"> List </content> <content name="MainContent"> <h2><%= Model.Title %></h2> <div if="Model.Posts.Count == 11"> 10 </div> <ul> <li each="var post in Model.Posts"> <a href="Post/Page?PostId=<%= post.Id %>"> <%= post.Title %> </a> </li> </ul> </content>
  • 演 示 生成树状HTML,视图片断缓存
  •  URL Rewrite  将源URL“修改为”目标URL来执行  根据目标URL来确定由哪个IHttpHandler对象来执行  多由Query String来传递数据  ASP.NET Routing  从URL中提取路由数据  根据配置在Route对象中的IRouteHandler对象来获取 IHttpHandler对象  可以通过路由数据组装出URL(DRY原则)
  • 得到 获取 IRouteHandler IHttpHandler URL Route 使用 执行 构造 RequestContext C 使用 请求阶段 V M 回复过程 提供 URL 使用 Route RouteValueDictionary
  • 演 示 子域名的路由,URL组装
  •  优秀框架的新标准:可测试性(Testability)  日省吾身:这么做容易测试吗?  分离一切关注点,使各组件可分别测试  Model / View / Controller  View Engine  Action Invoker  Controller / Action / Parameter Descriptor  Model Binder
  •  分离一切关注点  控制器与视图完全解耦  控制器与视图均不关注HttpContext  使用强类型的视图  强类型一切视图,并使用自定义基类  为每个视图定义对应的视图模型  避免使用弱类型的ViewData字典  尽可能薄的控制器  连接表现层与业务层(仅此而已)  WebForms难以单元测试?(并非如此)
  •  编写标准的语义化的客户端标记  简化对View单元测试的难度  简化对JavaScript单元测试的难度  尝试客户端的MVC  Model:HTML标记  View:CSS  Controller:JavaScript  编写优秀的JavaScript代码  注重复用,独立于具体页面内容(可使用约定)  WebForms“污染”客户端ID真是很严重的问题吗?
  • 演 示 对视图进行单元/回归测试
  •  Templated辅助方法  Areas支持  数据标记支持  客户端验证  模型验证提供者  元数据提供者  异步Action  强类型的辅助方法
  • 疑问和解答
  • 参考资源 我的博客:http://www.cnblogs.com/JeffreyZhao/ MvcPatch项目:http://MvcPatch.codeplex.com ASP.NET项目汇总:http://aspnet.codeplex.com ASP.NET MVC官方站点:http://asp.net/mvc 书籍推荐:Agile Web Development with Rails
  • 感谢您参与此会场! 您的意见与建议对我们非常重要。 请您填写反馈表。
  • © 2008 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.