Presentation is loading. Please wait.

Presentation is loading. Please wait.

Jess Chadwick Website Manager, Infragistics

Similar presentations


Presentation on theme: "Jess Chadwick Website Manager, Infragistics"— Presentation transcript:

1 Jess Chadwick Website Manager, Infragistics jesschadwick@gmail.com

2 The Genealogy of Awesomeness History of Microsoft Web Stuff

3 Active Server Pages

4 Active Server Pages (ASP)  V1 circa 1996  “Active Scripting Pages”: top-down script  Call into VB6/COM code to do “real work”  You might remember these oldies but goodies:  Request object  Response object  Session object  Server object  Application object  ObjectContext object  ASPError object

5 Classic ASP Example

6 ASP.NET  Released in 2002 as part of.NET 1.0  Not “ASP v.Next” – completely new  Introduced a few important concepts:  Rich programming framework  Code-Behind  Page Lifecycle  The omnipresent ViewState !

7 ASP.NET Page Lifecycle

8 “ASP.NET Extensions”  Started with “ASP.NET Futures”  ASP.NET AJAX  Silverlight Controls  ADO.NET Data Services  ASP.NET Dynamic Data And…  ASP.NET MVC!

9 What is ASP.NET MVC?  Microsoft’s ASP.NET implementation of the MVC software pattern  More control over your HTML and URLs  More easily testable framework  A new Web Project type for ASP.NET  An option / alternative

10 Let’s whet the appetite! DEMO: MVC Hello World

11 What’s the Point?  This is not “Web Forms v.Next”  All about alternatives  Flexibility  Extend it… or not  Create your own Controller- and ViewEngines, or use others such as Brail or NHaml  Fundamental  Part of System.Web namespace  Fully supported  KISS & DRY

12 Driving Goals  Separation of Concerns  Easy testing & TDD  Highly-maintainable applications  Extensible and Pluggable  Plug in what you need  Build your own custom build

13 Driving Goals (cont’d)  Clean URLs and HTML  SEO and REST friendly  Great interaction with ASP.NET  Handlers, Modules, Providers, etc. still work .ASPX,.ASCX,.MASTER pages  Visual Studio ASP.NET Designer surface

14 Careful – there’s a grease spot over there… Take a Look Under the Hood

15 Request Flow Request HTTP Routing Route Route Handler Http Handler Controller View Engine View Response

16 The Pattern ModelController View

17 The Model “The center of the universe” - Todd Snyder  This represents your core business domain… AKA – your “bread and butter”  Preferably independent of any specific technology

18 Views  Are for rendering/output.  Are usually pretty “stupid”  Web Forms as default ViewEngine .ASPX,.ASCX,.MASTER, etc.  Html Helpers for rendering markup  Can replace with other view technologies:  Template engines (NVelocity, Brail, …).  Output formats (images, RSS, JSON, …).  Mock out for testing.  Can use loosely typed or strongly typed data

19 Controllers  URLs route to actions on controllers, not pages  Controller executes logic, loads data (if any), and chooses view.  Can also redirect to other views & URLs public ActionResult ShowPost(int id) { Post p = PostRepository.GetPostById(id); if (p == null) { return RenderView("nosuchpost", id); } else { return RenderView(“showpost", p); }

20 Request Flow Request HTTP Routing Route Route Handler Http Handler Controller View Engine View Response

21 ModelController View The MVC Pattern in action Browser makes a request Route is determined Controller is activated Method on Controller is invoked Controller does some stuff Renders View, passing in custom ViewData URLs are rendered, pointing to other Controllers

22 DEMO: Northwind Sample

23 Routing Filters Extensibility View Engines Controller Factories Routing Handler ASP.NET MVC Features

24 URL Routing  Developers add Routes to a global RouteTable  Mapping creates a RouteData - a bag of key/values RouteTable.Routes.Add( new Route("blog/bydate/{year}/{month}/{day}", new MvcRouteHandler()){ Defaults = new RouteValueDictionary { {"controller", "blog"}, {"action", "show"} }, Constraints = new RouteValueDictionary { {"year", @"\d{1.4}"}, {"month", @"\d{1.2}"}, {"day", @"\d{1.2}"}} })

25 “Can’t you just stop and ask for directions!?” Demo: URL Routing

26 URL Routing (cont’d)  Separate assembly, not closely tied/related to ASP.NET MVC

27 Filters  Add pre- and post-execute behaviors to your controller actions  Useful for logging, compression, etc. public abstract class ActionFilterAttribute { public void OnActionExecuting(ActionExecutingContext context) ; public void OnActionExecuted(ActionExecutingContext context) ; // New in Pre-Preview 3: public void OnResultExecuting(ResultExecutingContext context); public void OnResultExecuted(ResultExecutedContext context); }

28 Extensibility  Views  Controllers  Models  Routes …all Pluggable

29 ViewEngineBase  View Engines render output  You get WebForms by default  Can implement your own  MVCContrib has ones for Brail, Nvelocity  NHaml is an interesting one to watch  View Engines can be used to  Offer new DSLs to make HTML easier  Generate totally different mime/types  Images, RSS, JSON, XML, OFX, VCards, whatever.

30 ViewEngineBase Class public abstract class ViewEngineBase { public abstract void RenderView(ViewContext viewContext); }

31 Example View: Web Forms <%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="true" CodeBehind="List.aspx" Inherits="MvcApplication5.Views.Products.List" Title="Products" %> CodeBehind="List.aspx" Inherits="MvcApplication5.Views.Products.List" Title="Products" %> ( ) ( ) </asp:Content>

32 Example View: NHaml %h2= ViewData.CategoryName %ul - foreach (var product in ViewData.Products) %li = product.ProductName.editlink = Html.ActionLink("Edit", new { Action="Edit", ID=product.ProductID }) = Html.ActionLink("Add New Product", new { Action="New" }) - foreach (var product in ViewData.Products) %li = product.ProductName.editlink = Html.ActionLink("Edit", new { Action="Edit", ID=product.ProductID }) = Html.ActionLink("Add New Product", new { Action="New" })

33 Now we can really take control! Demo: Filters and View Engines

34 MVCContrib  Myriad UI helper extensions and classes  View Engines  NHaml  NVelocity  Brail  Xslt  Controller factories (for IoC)  Castle (Windsor)  Spring.NET  Ninject  StructureMap  Object Builder  Unity Open Source project with extensions to base framework On CodePlex at http://www.codeplex.com/MVCContribhttp://www.codeplex.com/MVCContrib

35 “What!? I can mock out HttpContext!?” Testability

36 Designed for Testability  Mockable Intrinsics  HttpContextBase, HttpResponseBase, HttpRequestBase  Extensibility  IController  IControllerFactory  IRouteHandler  ViewEngineBase

37 Testing Controller Actions  No requirement to test within ASP.NET runtime!  Use RhinoMocks, TypeMock, Moq, etc.  Create Test versions of the parts of the runtime you want to stub [TestMethod] public void ShowPostsDisplayPostView() { TestPostRepository repository = new TestPostRepository(); TestViewEngine viewEngine = new TestViewEngine(); BlogController controller = new BlogController(…); controller.ShowPost(2); Assert.AreEqual("showpost",viewEngine.LastRequestedView); Assert.IsTrue(repository.GetPostByIdWasCalled); Assert.AreEqual(2, repository.LastRequestedPostId); } [TestMethod] public void ShowPostsDisplayPostView() { TestPostRepository repository = new TestPostRepository(); TestViewEngine viewEngine = new TestViewEngine(); BlogController controller = new BlogController(…); controller.ShowPost(2); Assert.AreEqual("showpost",viewEngine.LastRequestedView); Assert.IsTrue(repository.GetPostByIdWasCalled); Assert.AreEqual(2, repository.LastRequestedPostId); }

38 “Wasn’t this supposed to come first?” DEMO: Test-Driven Development

39 (I know what you’re thinking…) Popular Questions

40 Why reinvent the wheel?  Aren’t there already existing frameworks out there, such as Monorail?

41 ASP.NET MVC & REST  Does MVC do REST?  Depends on your definition.  What about ADO.NET Data Extensions (Astoria) and/or WCF?

42 Controls & Components  Can still use server controls?  Can we still use Web Forms server controls?  Decent support for user controls  Still more/better support to come

43 What about AJAX?  ASP.NET AJAX?  Requires  Roll your own  JS frameworks like jQuery make this easier

44 Scalability, Performance, Security, Etc.  A layer of abstraction working over the solid, tested ASP.NET foundation

45 When’s It Gonna Be Ready?

46 What’s the Point?  This is not “Web Forms v.Next”  All about alternatives  Flexibility  Extend it… or not  Create your own Controller- and ViewEngines, or use others such as Brail or NHaml  Fundamental  Part of System.Web namespace  Fully supported  KISS & DRY

47 Q & A (…and Thank You!)

48 Resources  The Bits  ASP.NET MVC Preview 2: http://asp.net/MVChttp://asp.net/MVC  ASP.NET MVC Pre-Preview3: http://www.codeplex.com/aspnethttp://www.codeplex.com/aspnet  MVCContrib: http://www.codeplex.com/MVCContribhttp://www.codeplex.com/MVCContrib  Quickstart  http://quickstarts.asp.net/3-5-extensions/mvc/default.aspx http://quickstarts.asp.net/3-5-extensions/mvc/default.aspx  Videos  ASP.NET: http://www.asp.net/learn/3.5-extensions-videos/http://www.asp.net/learn/3.5-extensions-videos/  MIX: http://sessions.visitmix.comhttp://sessions.visitmix.com  Community/Blogs  ASP.NET Forums: http://forums.asp.net/1146.aspx http://forums.asp.net/1146.aspx  Scott Guthrie (ScottGu): http://weblogs.asp.net/scottgu/http://weblogs.asp.net/scottgu/  Scott Hanselman: http://www.hanselman.com/blog/http://www.hanselman.com/blog/  Phil Haack: http://haacked.com/http://haacked.com/  Sample Apps  MVC Samples: http://www.codeplex.com/mvcsampleshttp://www.codeplex.com/mvcsamples  CodeCampServer: http://codecampserver.orghttp://codecampserver.org Jess Chadwick Web Lead Infragistics, Inc. jesschadwick@gmail.com http://blog.jesschadwick.com


Download ppt "Jess Chadwick Website Manager, Infragistics"

Similar presentations


Ads by Google