1 / 46

ASP.NET MVC Framework

ASP.NET MVC Framework. Simone Chiaretta Solution Developer, Avanade http://codeclimber.net.nz. 3 Aprile 2009. Who the hell am I?. Simone Chiaretta Lavoro per Avanade Italy Microsoft MVP ASP.NET Blogger – http://codeclimber.net.nz Fondatore di UGIALT.NET OpenSource developer Climber

sheri
Download Presentation

ASP.NET MVC Framework

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ASP.NET MVC Framework Simone ChiarettaSolution Developer, Avanade http://codeclimber.net.nz 3 Aprile 2009

  2. Who the hell am I? • Simone Chiaretta • Lavoro per Avanade Italy • Microsoft MVP ASP.NET • Blogger – http://codeclimber.net.nz • Fondatore di UGIALT.NET • OpenSource developer • Climber • All Around Nice Guy

  3. Agenda • Storiadeglistrumenti Microsoft per lo sviluppo Web • Introduzione ad ASP.NET MVC • Pattern MVC • ASP.NET MVC neldettaglio • Testing ASP.NET MVC • Futurodi ASP.NET MVC

  4. Storiadeglistrumenti Microsoft per lo sviluppo Web

  5. Prima c’era ASP “Classic”

  6. Prima c’era ASP “Classic” - Storia ASP (‘96 – 2000, IIS3 –> ) • Primo framework disviluppo web integratocolwebserver • Introduce le prime astrazioni per facilitarel’interazione con ilwebserver • Request • Response • Server

  7. Prima c’era ASP “Classic” - Problemi • Lasciacompletalibertà al programmatore = • Codice e HTML sonomischiati (“spaghetti code”) • Difficileseparareimplementazione e presentazione <% Set oConn = Server.CreateObject("ADODB.Connection") oConn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("DB.mdb") Set rsUsers = Server.CreateObject("ADODB.Recordset") rsUsers.Open "SELECT * FROM Users", oConn %> <TABLE align="center" border="0" cellpadding="0" cellspacing="0" width="100%"> <% do while not rsUsers.eof %> <tr> <td><%=rsUsers.fields(0)%></td> <td><%=rsUsers.fields(2)%></td> </tr> <% rs.movenext loop %> </table> <% rsUsers = Nothing oConn = Nothing %>

  8. Poi venne ASP.NET - Storia • Cercadirisolvereilproblemadello“spaghetti code” • Rilasciato Gen ‘02 con .NET 1.0 • Permettediadottare un approccioVB6-like per lo sviluppo web. • Nasceilconcettodi WebForm

  9. Poi venne ASP.NET - WebForm

  10. Poi venne ASP.NET - WebForm • Ciclodi vita dellapaginabasatosueventi • Programmazionebasatasueventi • UserControls e Control tree • Nasconde la natura state-less del web

  11. Poi venne ASP.NET - Caratteristiche • HTML e codicesono in due file distinti(code-behind): • .aspx: contiene HTML e webcontrols • .aspx.cs: contieneilcodice per manipolareiwebcontrols <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server“ <title>Sample page</title> </head> <body> <formid="form1" runat="server"> <div> <asp:Labelrunat="server" id="Label1" /> </div> </form> </body> </html> using System; namespace Website { public partial class Page1 : System.Web.UI.Page { protected Label Label1; protected void Page_Load (object sender, EventArgs e) { Label1.Text = "Hello ASP.NET"; } } }

  12. Poi venne ASP.NET - Problemi Page Lifecycle troppocomplesso

  13. Poi venne ASP.NET - Problemi Troppo codice HTML autogenerato

  14. Poi venne ASP.NET - Problemi Troppa “roba” daportare in giro: ViewState

  15. Poi venne ASP.NET - Problemi Inutilmentecomplesso

  16. Poi venne ASP.NET – SoluzioneaiProblemi • Codicetroppoaccoppiato: pattern MVP, WCSF, MonoRail • HTML “brutto”: CSS Adapter Toolkit, templated controls • ViewState“ingombrante”: abilitarloselettivamente Ma tuttociò non è “out-of-the-box”

  17. Introduzione a ASP.NET MVC

  18. ASP.NET MVC to the rescue Ritornoallasemplicità

  19. ASP.NET MVC to the rescue – Storia • Nasce per cercaredirisolvereiproblemidi ASP.NET • Annunciatoda Scott Guthrie alla prima ALT.NET conference di Austin a Ott ‘07 • Attualmente alla versione 1.0 (MIX09) • “Obbliga” unamaggiorseparazionedelleresponsabilità

  20. ASP.NET MVC – Caratteristiche • Implementail pattern Model-View-Controller • Sviluppato per esseretestabile • Estendibile • URL mapping engine • Puòutilizzareilmodellowebform per quelcheriguardailrendering, ma non per ilpostback • Supportatutte le funzionalità pre-esistenti: autenticazione, autorizzazione, caching, session, providers, ecc…

  21. Il Pattern MVC

  22. MVC in Real Life • Consegnadella pizza • L’utenteparla al controller (prendel’ordine per la pizza)

  23. MVC in Real Life • Il controller delega al model (ilcuoco “realizza” l’ordine)

  24. MVC in Real Life • Quando la pizza è pronta, viene data al controller chedelegaalla view(fattorinoporta la pizza a casa)

  25. Introduzione a MVC • Introdotto per la prima volta in Smalltalk nel ‘79 • “Di moda” negliultimianni grazie a Struts, Spring MVC e Ruby on Rails • Divide l’applicazione in 3 componenti: • Model: la business logic dell’applicazione, checontiene le informazioni sui dati • View: rappresentaidatinella UI visibiledall’utente • Controller: orchestra le operazioni, ricevel’input, decide come recuperareidati e lipassaalla view

  26. Il flussodiun’applicazione MVC Il Controller chiedeidati al Model La richiestaarriva al controller Model 2 1 3 Browser Controller Il Model restituisceidati al controller Il controller formattaidati e lipassaalla view 4 View 5 La view costriusce la paginachevieneinivata al browser

  27. ASP.NET MVC neldettaglio [with Demo]

  28. Flussodellarichiesta

  29. Routing • Parte di ASP.NET 3.5 SP1 • System.Web.Routing.dll • Url con parametri: • {controller}, {action}, {parametri} routes.MapRoute( "Blog", //nome "blog/{date}/{title}", //url /*valori di default per i parametri*/ new { controller = "Blog", //Controller action = "Show", //Action date = DateTime.Now, //Parametri title = "" } );

  30. Controller • Classe con nome<NomeController>Controller • EreditadaController • Un metodopubblico per Action • MetodorestituisceActionResult public classBlogController: Controller { public ActionResult Show(DateTime date, string title) { ViewData["Titolo"] = title; ViewData["Data"] = date; returnView(); //returnView(“<viewName>", <viewdata>); } }

  31. View – Loosely Typed • E’ un normaleWebFormcheereditadaViewPage • DEVE SOLOcostruire la UI HTML • ViewData è +/- unaHashTable • Non c’è “code-behind” <%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %> <h2><%= Html.Encode(ViewData["Message"]) %></h2> <%= ((DateTime)ViewData["Data"]).ToLongDateString()%>

  32. View – Strongly Typed • La view puòancheessere strongly typed • Complie-time check • Intellisense friendly  • ViewData è unaclasse custom <%@ Page Title="" Language="C#" Inherits="System.Web.Mvc.ViewPage<Post>" %> <h2><%= Html.Encode(Model.Message) %></h2> <%= Model.Data.ToLongDateString()%>

  33. View – UI Helpers • UI Helper per aiutare la scritturadicodice HTML • Html.ActionLink • Html.ActionLink<ControllerClass> • Html.BeginForm • Html.BeginForm<ControllerClass> Html.ActionLink(“TestoLink",“ActionName",“Controller", new { parametri });

  34. Estendere MVC • Tuttopuòessereesteso • IControllerFactory • StructureMapControllerFactory • UnityControllerFactory • SpringControllerFactory • … • IViewFactory • BooViewEngine • NHamlViewFactory • … • Quasi tutte le integazionisonosviluppateall’internodiMVCContrib: http://www.codeplex.com/MVCContrib

  35. Testare ASP.NET MVC [with Demo]

  36. Testare ASP.NET MVC Ma questa non avrebbedovutoessere la prima slide? 

  37. Testarei controller • No mocking involved [TestClass] public classBlogControllerTest { [TestMethod] public void Show() { BlogController controller = newBlogController(); var result = controller.Show(2010,10,11,"Titolo Post") as RenderViewResult; Assert.IsNotNull(result, "Aspettavo un view da renderizzare"); Assert.AreEqual("Titolo Post", result.ViewData["Titolo"], "Mi aspettavo un altro messaggio"); } }

  38. Altriesempidi test • Testarestrongly-typed view data • Assert.AreEqual(expected, ((BlogModel)result.ViewData.Model).Titolo,…); • Testare Redirect • var result = controller.Show(…) as RedirectToRouteResult;

  39. Wrapping up…

  40. Statodi ASP.NET MVC • Rilasciato con licenzaOpenSource MS-PL • Versione 1.0 rilasciatadaqualchesettimana • Versione 2.0 con ASP.NET 4.0 • Futures disponibilisuCodePlex

  41. Conclusioni • ASP.NET MVC è un framework checipermettediscriverebuon software by default • ASP.NET WebFormnecessitadi “lavoro” per raggiungere lo stessolivellodipulizia • ASP.NET MVC non è ASP.NET 4.0 • è un’alternativa, non un sostituto

  42. Risorse • http://asp.net/mvc/ - Sitoufficiale, con download Beta, sample, video, ecc. • http://www.codeplex.com/aspnet - Codicesorgente • http://del.icio.us/tag/aspnetmvc - tuttigliarticolisu ASP.NET MVC • http://polymorphicpodcast.com/shows/mvcresources/ - lista “commentata” dirisorse • Blog di MS • ScottGu: http://weblogs.asp.net/scottgu/default.aspx • ScottHa: http://www.hanselman.com/blog/ • PhilHa: http://haacked.com/

  43. Beginning ASP.NET MVC • Simone Chiaretta e Keyvan Nayyeri • Rilascio: Luglio 2009 • Già in prevendita su Amazon • TOC: • MVC • Testing • And more... • http://www.amazon.co.uk/Beginning-ASP-NET-MVC-Simone-Chiaretta/dp/047043399X/

  44. Fun stuff • The MVC Song: • http://www.railsenvy.com/assets/2008/6/3/mvc_song.mp3 • MVC Public Service Announcement Videos • http://www.railsenvy.com/2008/6/3/mvc-videos • http://www.vimeo.com/album/15216

  45. Contatti – Simone Chiaretta • MSN: simone_ch@hotmail.com • Blog: • English: http://codeclimber.net.nz/ • Italiano: http://blogs.ugidotnet.org/piyo/ • Twitter: http://twitter.com/simonech

  46. Q&A

More Related