ASP.NET MVC 3: se non ora, quando?
-
Upload
giorgio-di-nardo -
Category
Technology
-
view
1.674 -
download
1
description
Transcript of 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
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 [email protected]://blogs.ugidotnet.org/akelitz@akelitz