ASP.NET MVC 3: se non ora, quando?

34
ASP.NET MVC 3: Se non ora, quando? Giorgio Di Nardo [email protected] rg http://blogs.ugidotnet.org/ak elitz @akelitz

description

Sessione su ASP.NET MVC 3 al Community Live 2011 [13 Set 2011]

Transcript of ASP.NET MVC 3: se non ora, quando?

Page 1: ASP.NET MVC 3: se non ora, quando?

ASP.NET MVC 3:Se non ora, quando?

Giorgio Di [email protected]://blogs.ugidotnet.org/akelitz@akelitz

Page 2: ASP.NET MVC 3: se non ora, quando?

Agenda

Uno sguardo:• al passato… (cos’è ASP.NET MVC) 10 min

• …al presente… (le novità della versione 3) 30 min

– NuGet– Razor– Scaffolding– Dependency Injection– Model Validation– …

• … e al futuro (roadmap della versione 4) 5 min

Page 3: ASP.NET MVC 3: se non ora, quando?

Cos’è ASP.NET MVC?

• Un nuovo tipo di progetto disponibile in Visual Studio per applicazioni web

• L’implementazione Microsoft del pattern architetturale MVC (Model 2)

• Un’alternativa in più a nostra disposizione– Non sostituisce Web Forms– Auto o moto? Cambio manuale o automatico?– Progettato sulla stessa piattaforma ASP.NET

Page 4: ASP.NET MVC 3: se non ora, quando?

Breve storia di ASP.NET MVC

• ASP.NET MVC 1.0– Prototype: Feb 2007– CTP: Dic 2007– Beta: Ott 2008– RC: Gen 2009– RTW: Mar 2009

• ASP.NET MVC 2– CTP: Lug 2009– Beta: Nov 2009– RC: Dic 2009– RTM: Mar 2010

• ASP.NET MVC 3– CTP: Lug 2010– Beta: Ott 2010– RC: Nov 2010– RTM: Gen 2011

Page 5: ASP.NET MVC 3: se non ora, quando?

Cos’è MVC?

• È un pattern architetturale• Punta alla separazione delle responsabilità

(SoC)• È composto dalla triade Model-View-Controller

– Model: rappresenta i dati e le regole per manipolarli– View: è l’interfaccia utilizzata per presentare tali dati– Controller: si occupa di gestire l’interazione tra l’utente e il sistema

• È stato declinato in diverse varianti tra cui Model2

Page 6: ASP.NET MVC 3: se non ora, quando?

Come funziona Model2?

Client

Utente(browser)

Server

Controller

View

Model

Page 7: ASP.NET MVC 3: se non ora, quando?

ASP

.NET

MV

C

Prodotti/1 ProdottiController

View

Ciclo di vita di una richiesta in ASP.NETA

SP.N

ETW

eb F

orm

s

Pagina.aspxHTTP HandlerASP.pagina_aspx

ASP.NET runtime

HTML

HTTP Module

URL Routing

HTTP Handler

MVCHandler

Page 8: ASP.NET MVC 3: se non ora, quando?

Ciclo di vita di una richiesta con ASP.NET MVC

Request

URL Routing

HTTP Handler

Controller Factory

Controller

Model Binder Action

Action Filter

Action Result

View Engine

View

Response

Page 9: ASP.NET MVC 3: se non ora, quando?

Pilastri di ASP.NET MVC

• Separation of concerns (SoC)– Ogni componente ha il suo ruolo preciso– Don’t repeat yourself (DRY)

• Testabile– Tutti i componenti sono facilmente mockabili– Pieno supporto alla Dependency Injection (DI)– Non richiede che l’applicazione giri nel processo ASP.NET

• Estensibile e flessibile– Tutti i componenti sono liberamente sostituibili– Convention over configuration (CoC)

Page 10: ASP.NET MVC 3: se non ora, quando?

demo

Page 11: ASP.NET MVC 3: se non ora, quando?

Novità di ASP.NET MVC 3

• NuGet• Razor• Dependency Injection• Scaffolding• Model Validation

• Helper Methods• Unobtrusive Javascript• JSON Model Binding• Granular Input Validation• Global Action Filters• ViewBag• Nuovi Action Result• Sessionless Controllers• Partial Page Output Cache• Html.Raw

Page 12: ASP.NET MVC 3: se non ora, quando?

NuGetAggiungere un riferimento senza

NuGetAggiungere un riferimento con

NuGet

Aggiungere pacchetto

Trovarlo

Scaricarlo

Estrarlo

Referenziarlo

Configurarlo

Page 13: ASP.NET MVC 3: se non ora, quando?

demo

Page 14: ASP.NET MVC 3: se non ora, quando?

NuGet

• Un Package Manager per .NET e Visual Studio

• Installabile tramite Extension Manager

• Utilizzabile tramite:

– GUI

– Console PowerShell

– Tool a riga di comando

• Supporta sorgenti multiple (pubbliche e private)

Page 15: ASP.NET MVC 3: se non ora, quando?

Razor

• Nuovo View Engine con sintassi concisa• Risponde all’esigenza di sostituire la sintassi macchinosa

del WebForms• Evita lo spaghetti-code• La chiave è nel carattere @ che consente una transizione

rapida da HTML a C#...• …e nell’intelligenza del parser nel gestire la transizione

inversa

Page 16: ASP.NET MVC 3: se non ora, quando?

demo

Page 17: ASP.NET MVC 3: se non ora, quando?

Razor

• Compatto, espressivo, fluido• Facile da apprendere• Non richiede di imparare nuovo linguaggio• Utilizzabile con ogni editor di testo• Completo supporto Intellisense

Page 18: ASP.NET MVC 3: se non ora, quando?

Scaffolding

• Generazione automatica di codice MVC• Utile per:

– Studiare un esempio funzionante– Avere una base di partenza da sviluppare

• Utilizzabile in modalità Console o GUI• Basato su Template T4 e PowerShell• Estensibile e personalizzabile

Page 19: ASP.NET MVC 3: se non ora, quando?

demo

Page 20: ASP.NET MVC 3: se non ora, quando?

Dependency Injection

• Consente di risolvere i problemi di dipendenza

• Concretizzazione del pattern astratto Inversion-of-Control• Supporto nativo in MVC tramite IDependencyResolver

• Consente di incapsulare facilmente uno IoC Container• Molte implementazioni sono disponibili su NuGet

ComponenteA

ComponenteB

ServizioC

Page 21: ASP.NET MVC 3: se non ora, quando?

demo

Page 22: ASP.NET MVC 3: se non ora, quando?

Model Validation

• In MVC validare i dati = validare il Model• Data Annotation come approccio di base• Stile dichiarativo = attributi• Non solo validazione ma anche per UI• Supporto sia lato-server che lato-client• Localizzazione automatica con la possibilità di usare file di

risorse

Page 23: ASP.NET MVC 3: se non ora, quando?

Model Validation

• Un valore deve essere specificato per la proprietàRequired

• La lunghezza della proprietà String deve essere compresa tra un minimo (opzionale) ed un massimoStringLenght

• La proprietà String deve rispettare una precisa espressione regolareRegularExpression

• Il valore della proprietà deve essere compreso tra un minimo ed un massimoRange

• La proprietà deve essere uguale ad un’altraCompare

• La proprietà può essere validata lato-client con AJAX e JSonRemote

• Il sistema è facilmente estensibile con attributi custom…

Page 24: ASP.NET MVC 3: se non ora, quando?

Model Validation

• Quando avviene?– In automatico durante il Model Binding– A richiesta con il metodo TryUpdateModel

• Come si verificano i risultati?– Proprietà ModelState.IsValid del Controller– In automatico tramite HTML helpers

• Come personalizzare?– Definendo nuovi attributi– Inserendo la validazione all’interno del Model

Page 25: ASP.NET MVC 3: se non ora, quando?

Model Validation

• Specifica l’etichetta per la proprietà e l’ordine di visualizzazioneDisplay

• Specifica la visibilità della proprietàScaffoldColumn

• Specifica il formato di visualizzazione dei datiDisplayFormat• Specifica al Model Binder di non aggiornare la

proprietàReadOnly• Specifica il contenuto della proprietà (password,

valuta, ecc.)DataType

• Specifica un custom template da utilizzareUIHint• Specifica il render della proprietà come campo

hiddenHiddenInput

Page 26: ASP.NET MVC 3: se non ora, quando?

demo

Page 27: ASP.NET MVC 3: se non ora, quando?

Novità di ASP.NET MVC 3

• Helper Methods• Unobtrusive Javascript• JSON Model Binding• Granular Input Validation• Global Action Filters• ViewBag• Nuovi Action Result• Sessionless Controllers• Partial Page Output Cache• Html.Raw

Page 28: ASP.NET MVC 3: se non ora, quando?

RoadMap di ASP.NET MVC 4

L’obiettivo ambizioso è quello di «rendere MVC 4 la miglior piattaforma per creare rich web applications»• Ajax• HTML5, Tablet e Mobile• CloudAlcune nuove caratteristiche• Recipe• Mobile Support• Task and Task<T> Support for AsyncController Classes• …

Page 29: ASP.NET MVC 3: se non ora, quando?

Recipe

• Dialog box scaricabili via NuGet che automatizzano passo dopo passo la realizzazione di un particolare task (griglie Ajax, autenticazione claim-based con WIF, ecc.)

Page 30: ASP.NET MVC 3: se non ora, quando?

Mobile support

• Implementare un supporto first-class per il mobile

• Markup e CSS pensati per scalare bene e nuovi Project template

• Possibilità di creare viste con il suffisso .Mobile

Page 31: ASP.NET MVC 3: se non ora, quando?

Task and Task<T> Support for AsyncController Classes• Supporto alla keyword await per la programmazione

asincrona

Page 32: ASP.NET MVC 3: se non ora, quando?

Risorse

• ASP.NET MVC– Home Page: http://www.asp.net/mvc/– Forum: http://forums.asp.net/1146.aspx – Codice sorgente: http://aspnet.codeplex.com/– MVC Contrib: http://mvccontrib.codeplex.com/

• Blog– Scott Guthrie: http://weblogs.asp.net/scottgu/– Phil Haack: http://haacked.com/ – Brad Wilson: http://bradwilson.typepad.com/– Scott Hanselman: http://www.hanselman.com/

Page 33: ASP.NET MVC 3: se non ora, quando?

Risorse

• Libri– Programming Microsoft ASP.NET MVC (Microsoft)– Professional ASP.NET MVC 3 (Wrox)– Pro ASP.NET MVC 3 Framework (Apress)

Page 34: ASP.NET MVC 3: se non ora, quando?

ASP.NET MVC 3:Se non ora, quando?

Giorgio Di [email protected]://blogs.ugidotnet.org/akelitz@akelitz