Hanselman lipton asp_connections_ams304_mvc

327 views

Published on

Published in: Career, Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
327
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
11
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • Been around since Xerox in 1979
  • Been around since Xerox in 1979
  • Been around since Xerox in 1979
  • Write a blog
  • Write a blog
  • Write a blog
  • Write a blog
  • Write a blog
  • Write a blog
  • Hanselman lipton asp_connections_ams304_mvc

    1. 1. AMS304: Introduction to theASP.NET Model View Controller (MVC) FrameworkScott Hanselman Eilon Lipton Microsoft Microsoftscottha@microsoft.com elipton@microsoft.com
    2. 2. MVCINTRO
    3. 3. Goodness• Maintain Clean Separation of Concerns ● Easy Testing ● Red/Green TDD ● Highly maintainable applications by default• Extensible and Pluggable ● Support replacing any component of the system
    4. 4. Goodness• Enable clean URLs and HTML ● SEO and REST friendly URL structures• Great integration within ASP.NET ● Support both static and dynamic languages
    5. 5. What’s the Point?• This is not Web Forms 4.0 ● It’s about alternatives. Car vs. Motorcycle.• Simple or as complex as you like ● Extend it, add IOC. Or not. If the shoe pinches, don’t wear it.• Fundamental ● Part of System.Web and isn’t going anywhere.• Plays Well With Others ● Feel free to use NHibernate for Models, Brail for Views and Whatever for Controllers. Be Happy.
    6. 6. MVC Model View Controller
    7. 7. A Little More Detail •Browser requests /Products/ •Route is determined Model •Controller is activated •Method on Controller is invoke •Controller does some stuff •Renders View, passing in custom ViewData •URLs are rendered, pointing to other View Controller Controllers
    8. 8. Even More Detail – Request FlowRequest • You can futz at each step in the process URL HttpRouting Controller Response Handler Route View Route View Handler Factory
    9. 9. Demo – Hello MVC World Don’t fall asleep, it’ll be worth it.
    10. 10. MVCHOW IT WORKS
    11. 11. Basic Controller Handling• Scenarios, Goals and Design ● URLs route to controller “actions”, not pages – mark actions in Controller. ● Controller executes logic, chooses view. [ControllerAction] public void ShowPost(int id) { Post p = PostRepository.GetPostById(id); if (p != null) { RenderView("showpost", p); } else { RenderView("nosuchpost", id); }}
    12. 12. Basic Views• Scenarios, Goals and Design: ● Are for rendering/output. • Pre-defined and extensible rendering helpers ● Can use .ASPX, .ASCX, .MASTER, etc. ● Can replace with other view technologies: • Template engines (NVelocity, Brail, …). • Output formats (images, RSS, JSON, …). • Mock out for testing. ● Controller sets data on the View • Loosely typed or strongly typed data
    13. 13. URL Routing – Pretty URIs • Developers adds Routes to a global RouteTable • Mapping creates a RouteData - a bag of key/valuesprotected void Application_Start(object sender, EventArgs e){RouteTable.Routes.Add(new Route { Url = "Blog/bydate/[year]/[month]/[day]", Defaults = new { controller="blog", action="showposts" }, Validation = new { year=@"d{1,4}", month= @"d{1,2}", day = @"d{1,2}"} });RouteTable.Routes.Add(new Route { Url = "[controller]/[action]/[id]", RouteHandler = typeof(MvcRouteHandler) });}
    14. 14. Demo – Routing The route less travelled…
    15. 15. MVCHOW TO TEST IT
    16. 16. Interfaces and TDD• Mockable Intrinsics ● IHttpContext, IHttpResponse, IHttpRequest• Extensibility ● IController ● IControllerFactory ● IRouteHandler ● IView ● IViewFactory
    17. 17. Testing Controller Actions• No requirement to mock out full ASP.NET runtime.[TestMethod]public void ShowPostsDisplayPostView() { TestPostRepository repository = new TestPostRepository(); TestViewFactory viewFactory = new TestViewFactory(); BlogController controller = new BlogController(…); controller.ShowPost(2); Assert.AreEqual("showpost", viewFactory.LastRequestedView); Assert.IsTrue(repository.GetPostByIdWasCalled); Assert.AreEqual(2, repository.LastRequestedPostId);}
    18. 18. Controller Factory• Scenarios, Goals and Design: ● Hook creation of controller instance • Dependency Injection. • Object Interception.public interface IControllerFactory { IController CreateController(IHttpContext context, RouteData routeData, Type controllerType);}protected void Application_Start(object s, EventArgs e) { ControllerBuilder.Current.SetDefaultControllerFactory( typeof(MyControllerFactory));}
    19. 19. View Factory• Scenarios, Goals and Design: ● Mock out views for testing ● Replace ASPX with other technologiespublic interface IViewFactory { IView CreateView(IHttpContext context, RouteData routeData, string viewName, string layoutName, object viewData);}Inside controller class: ViewFactory = new XmlViewFactory(...); RenderView("foo", myData);
    20. 20. Demo – TDD Wasn’t this demo technically supposed to be first?
    21. 21. Demo – Dynamic Data Controls Not DDE. Scared you, didn’t I?
    22. 22. Demo – ImageGen It’s your thing. Do what you wanna do.
    23. 23. Demo – Ruby View Engine& Python Controller It’s a kinder, gentler Microsoft. No seriously. Hug?
    24. 24. Demo – XML-RPC SOAP is for dorks.
    25. 25. Conclusion• This is not Web Forms 4.0 ● It’s about alternatives. Car vs. Motorcycle.• Simple or as complex as you like ● Extend it, add IOC. Or not. If the shoe pinches, don’t wear it.• Fundamental ● Part of System.Web and isn’t going anywhere.• Plays Well With Others ● Feel free to use NHibernate for Models, Brail for Views and VB for Controllers. Be Happy.
    26. 26. Your Feedback is ImportantPlease fill out a session evaluation form and either put them in the basket near the exit or drop them off at the conference registration desk. Thank you!

    ×