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

Post on 14-Dec-2014

1,674 views 1 download

description

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

transcript

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

Giorgio Di Nardogiorgio.dinardo@domusdotnet.orghttp://blogs.ugidotnet.org/akelitz@akelitz

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

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

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

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

Come funziona Model2?

Client

Utente(browser)

Server

Controller

View

Model

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

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

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)

demo

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

NuGetAggiungere un riferimento senza

NuGetAggiungere un riferimento con

NuGet

Aggiungere pacchetto

Trovarlo

Scaricarlo

Estrarlo

Referenziarlo

Configurarlo

demo

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)

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

demo

Razor

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

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

demo

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

demo

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

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…

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

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

demo

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

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• …

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.)

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

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

asincrona

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/

Risorse

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

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

Giorgio Di Nardogiorgio.dinardo@domusdotnet.orghttp://blogs.ugidotnet.org/akelitz@akelitz