asp.net mvc framework

40
ASP.NET MVC Framework Simone Chiaretta Solution Developer, Avanade http://codeclimber.net.nz 27 Giugno 2008

Upload: dotnetmarche

Post on 18-Nov-2014

104 views

Category:

Travel


1 download

DESCRIPTION

Asp.NET MVC è un nuovo framework per lo sviluppo di applicazioni web alternativo al modello webform. Questo consente di utilizzare il pattern MVC per lo sviluppo di applicazioni Asp.NET, permettendo quindi una miglior separazione delle responsabilità che a sua volta porta ad una maggior manutenibilità, riusabilità e facilità nel testing. La sessione illustrerà i motivi che hanno portato alla nascita di Asp.NET MVC e le sue caratteristiche fondamentali. Agenda: - Storia dei framework MS per lo sviluppo web - Introduzione a Asp.NET MVC - Vantaggi di Asp.NET MVC - Il pattern MVC - Hello MVC: DEMO - Componenti di MVC: Routing, Controller, Model, View

TRANSCRIPT

Page 1: Asp.NET MVC Framework

ASP.NET MVC Framework

Simone ChiarettaSolution Developer, Avanadehttp://codeclimber.net.nz

27 Giugno 2008

Page 2: Asp.NET MVC Framework

Agenda

► Storia degli strumenti Microsoft per lo sviluppo Web

► Introduzione ad ASP.NET MVC► Pattern MVC► ASP.NET MVC nel dettaglio► Futuro di ASP.NET MVC

2

Page 3: Asp.NET MVC Framework

Storia degli strumenti Microsoft per lo sviluppo Web

Page 4: Asp.NET MVC Framework

Prima c’era ASP “Classic”

4

Page 5: Asp.NET MVC Framework

Prima c’era ASP “Classic” - Storia

ASP (‘96 – 2000, IIS3 –> )– Primo framework di sviluppo web integrato col webserver

– Introduce le prime astrazioni per facilitare l’interazione con il webserver– Request– Response– Server

5

Page 6: Asp.NET MVC Framework

Prima c’era ASP “Classic” - Problemi

► Lascia completa libertà al programmatore =– Codice e HTML sono mischiati (“spaghetti code”)

► Difficile separare implementazione e presentazione

6

<% 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 %>

Page 7: Asp.NET MVC Framework

Poi venne ASP.NET - Storia

► Cerca di risolvere il problema dello “spaghetti code”

► Rilasciato Gen ‘02 con .NET 1.0► Permette di adottare un approccio VB6-like per lo sviluppo web.

► Nasce il concetto di

WebForm

7

Page 8: Asp.NET MVC Framework

Poi venne ASP.NET - WebForm

Page 9: Asp.NET MVC Framework

Poi venne ASP.NET - WebForm

► Ciclo di vita della pagina basato su eventi

► Programmazione basata su eventi► UserControls e Control tree► Nasconde la natura state-less delle web application introducendo la gestione dello stato– Postback– Session– Application– ViewState

9

Page 10: Asp.NET MVC Framework

Poi venne ASP.NET - Caratteristiche

► HTML e codice sono in due file distinti (code-behind):– .aspx: contiene HTML e webcontrols– .aspx.cs: contiene il codice per manipolare i webcontrols

10

<html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server“<title>Sample page</title> </head> <body> <form id="form1" runat="server"> <div><asp:Label runat="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"; } }}

Page 11: Asp.NET MVC Framework

Poi venne ASP.NET - Problemi

11

Page Lifecycletroppo complesso

Page 12: Asp.NET MVC Framework

Poi venne ASP.NET - Problemi

Troppocodice HTMLautogenerato

Page 13: Asp.NET MVC Framework

Poi venne ASP.NET - Problemi

Troppa “roba” da portare in giro:

ViewState

Page 14: Asp.NET MVC Framework

Poi venne ASP.NET - Problemi

Inutilmente complesso

Page 15: Asp.NET MVC Framework

Poi venne ASP.NET – Soluzione ai Problemi► Codice troppo accoppiato: pattern MVP, WCSF, MonoRail

► HTML “brutto”: CSS Adapter Toolkit, templated controls

► ViewState “ingombrante”: abilitarlo selettivamente

15

Ma tutto ciò non è “out-of-the-box”

Page 16: Asp.NET MVC Framework

Introduzione a ASP.NET MVC

Page 17: Asp.NET MVC Framework

ASP.NET MVC to the rescue

Ritorno alla semplicità

Page 18: Asp.NET MVC Framework

ASP.NET MVC to the rescue – Storia

► Nasce per cercare di risolvere i problemi di ASP.NET

► Annunciato da Scott Guthrie alla prima ALT.NET conference di Austin a Ott ‘07

► Attualmente alla versione Preview3 (Giugno ‘08)

► “Obbliga” una maggior separazione delle responsabilità

18

Page 19: Asp.NET MVC Framework

ASP.NET MVC – Caratteristiche

► Implementa il pattern Model-View-Controller

► Sviluppato per essere testabile► Estendibile► URL mapping engine► Utilizza il modello webform per quel che riguarda il rendering, ma non per il postback

► Supporta tutte le funzionalità pre-esistenti: autenticazione, autorizzazione, caching, session, providers, ecc…

19

Page 20: Asp.NET MVC Framework

Il Pattern MVC

Page 21: Asp.NET MVC Framework

MVC in Real Life

► Consegna della pizza► L’utente parla al controller (prende l’ordine per la pizza)

Page 22: Asp.NET MVC Framework

MVC in Real Life

► Il controller delega al model (il cuoco riceve l’ordine)

Page 23: Asp.NET MVC Framework

MVC in Real Life

► Quando la pizza è pronta, viene data al controller che delega alla view(fattorino porta la pizza a casa)

Page 24: Asp.NET MVC Framework

Introduzione a MVC

► Introdotto per la prima volta in Smalltalk nel ‘79

► “Di moda” negli ultimi anni grazie a Struts, Spring MVC e Ruby on Rails

► Divide l’applicazione in 3 componenti:– Model: la business logic dell’applicazione, che contiene le informazioni sui dati

– View: rappresenta i dati nella UI visibile dall’utente

– Controller: orchestra le operazioni, riceve l’input, decide come recuperare i dati e li passa alla view

24

Page 25: Asp.NET MVC Framework

Il flusso di un’applicazione MVC

25

Model

View

Controller

1

5

2

4

3

Browser

La richiesta arriva al controller

Il Controller chiede i dati al Model

Il Model restituisce i

dati al controller

Il controller formatta i dati e li passa alla view

La view costriusce la pagina che viene inivata al

browser

Page 26: Asp.NET MVC Framework

ASP.NET MVC nel dettaglio[with Demo]

Page 27: Asp.NET MVC Framework

Flusso della richiesta

Request

27

Page 28: Asp.NET MVC Framework

Routing

► Parte di ASP.NET 3.5 SP1– System.Web.Routing.dll

► Url con parametri:– {controller}, {action}, {parametri}

28

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 = "" } );

Page 29: Asp.NET MVC Framework

Controller

► Classe con nome <NomeController>Controller► Eredita da Controller► Un metodo pubblico per Action► Metodo restituisce ActionResult

29

public class BlogController : Controller { public ActionResult Show(DateTime date, string title) { ViewData["Titolo"] = title; ViewData["Data"] = date; return View(); //return View(“<viewName>", <viewdata>); } }

Page 30: Asp.NET MVC Framework

View – Loosely Typed

► E’ un normale WebForm che eredita da ViewPage

► DEVE SOLO costruire la UI HTML► ViewData è +/- una HashTable

30

public partial class Show : ViewPage {

//quasi sempre vuoto }

<h2><%= Html.Encode(ViewData["Message"]) %></h2>

<%= ((DateTime)ViewData["Data"]).ToLongDateString()%>

Page 31: Asp.NET MVC Framework

View – Strongly Typed

► La view può anche essere strongly typed– Complie time check– Intellisense friendly

► ViewData è una classe custom

31

public partial class StrongShow : ViewPage<PresentationModelClass> {

//quasi sempre vuoto }

<h2><%= Html.Encode(ViewData.Model.Message) %></h2>

<%= ViewData.Model.Data.ToLongDateString()%>

Page 32: Asp.NET MVC Framework

View – UI Helpers

► UI Helper per aiutare la scrittura di codice HTML

– Html.ActionLink– Html.ActionLink<ControllerClass>– Html.Form– Html.Form<ControllerClass>

32

Html.ActionLink(“Testo Link",“ActionName",“Controller", new { parametri });

Html.ActionLink<ControllerClass>( c => c.ActionName(parametri)," Testo Link");

Page 33: Asp.NET MVC Framework

Estendere MVC

► Tutto può essere esteso– IControllerFactory

– StructureMapControllerFactory– UnityControllerFactory– SpringControllerFactory– …

– IViewFactory– BooViewEngine– NHamlViewFactory– …

► Quasi tutte le integazioni sono sviluppate all’interno di MVCContrib: http://www.codeplex.com/MVCContrib

33

Page 34: Asp.NET MVC Framework

Wrapping up…

Page 35: Asp.NET MVC Framework

ASP.NET MVC vs WebForms

► WebForms– Sviluppo RAD– Paradigma più simile allo sviluppo tradizionale client-side

– Ottimo per “prototipare”– Può diventare inmantenibile

► ASP.NET MVC– Più codice da scrivere– “Miglior” architettura dell’applicazione– Maggior controllo su HTML– Abilita uso di metodologie Agile

35

Page 36: Asp.NET MVC Framework

Stato di ASP.NET MVC

► Ora siamo alla Preview 3► Routing ormai “stabile” (parte di ASP.NET 3.5 SP1)

► Nelle prossime Preview verranno indirizzati i seguenti problemi:– Integrazione “nativa” di Ajax– Controlli con logica applicativa

36

Page 37: Asp.NET MVC Framework

Conclusioni

► ASP.NET MVC è un framework che ci permette di scrivere buon software by default

► ASP.NET WebForm necessita di “lavoro” per raggiungere lo stesso livello di pulizia

► ASP.NET MVC non è ASP.NET 4.0– è un’alternativa, non un sostituto

37

Page 38: Asp.NET MVC Framework

Risorse

► http://asp.net/mvc/ - Sito ufficiale, con download P3

► http://www.codeplex.com/aspnet - Codice sorgente

► http://del.icio.us/tag/aspnetmvc - tutti gli articoli su ASP.NET MVC

► http://polymorphicpodcast.com/shows/mvcresources/ - lista “commentata” di risorse

► Blog di MS– ScottGu: http://weblogs.asp.net/scottgu/default.aspx

– ScottHa: http://www.hanselman.com/blog/– PhilHa: http://haacked.com/

38

Page 39: Asp.NET MVC Framework

Contatti – Simone Chiaretta

► MSN: [email protected]► Blog:

– English: http://codeclimber.net.nz/– Italiano: http://blogs.ugidotnet.org/piyo/

39

Page 40: Asp.NET MVC Framework

Q&A

40