ASP.NET MVC 3:Se non ora, quando?Giorgio Di Nardogiorgio.dinardo@domusdotnet.orghttp://blogs.ugidotnet.org/akelitz@akelitz
AgendaUno sguardo:al passato… (cos’è ASP.NET MVC)		 10 min…al presente… (le novità della versione 3)	 30 minNuGetRazorScaffoldingDependencyInjectionModel Validation…… e al futuro (roadmapdella versione 4)	 5 min
Cos’è ASP.NET MVC?Un nuovo tipo di progetto disponibile in Visual Studio per applicazioni webL’implementazione Microsoft del pattern architetturale MVC (Model 2)Un’alternativa in più a nostra disposizioneNon sostituisce Web FormsAuto o moto? Cambio manuale o automatico?Progettato sulla stessa piattaforma ASP.NET
Breve storia di ASP.NET MVCASP.NET MVC 1.0Prototype: Feb 2007CTP: Dic 2007Beta: Ott 2008RC: Gen 2009RTW: Mar 2009ASP.NET MVC 2CTP: Lug 2009Beta: Nov 2009RC: Dic 2009RTM: Mar 2010ASP.NET MVC 3CTP: Lug 2010Beta: Ott 2010RC: Nov 2010RTM: Gen 2011
Cos’è MVC?È un pattern architetturalePunta alla separazione delle responsabilità (SoC)È composto dalla triade Model-View-ControllerModel: rappresenta i dati e le regole per manipolarliView: è l’interfaccia utilizzata per presentare tali datiController: si occupa di gestire l’interazione tra l’utente e il sistemaÈ stato declinato in diverse varianti tra cui Model2
Come funziona Model2?ClientServerViewModelUtente(browser)Controller
Ciclo di vita di una richiesta in ASP.NETASP.NETruntimeASP.NETWeb FormsHTTP  HandlerASP.pagina_aspxPagina.aspxHTMLASP.NETMVCHTTP ModuleURL RoutingHTTP HandlerMVCHandlerViewProdottiControllerProdotti/1
Ciclo di vita di una richiesta con ASP.NET MVC
Pilastri di ASP.NET MVCSeparationofconcerns (SoC)Ogni componente ha il suo ruolo precisoDon’t repeatyourself (DRY)TestabileTutti i componenti sono facilmente mockabiliPieno supporto alla DependencyInjection (DI)Non richiede che l’applicazione giri nel processo ASP.NETEstensibile e flessibileTutti i componenti sono liberamente sostituibiliConvention overconfiguration (CoC)
demo
Novità di ASP.NET MVC 3NuGetRazorDependencyInjectionScaffoldingModel ValidationHelperMethodsUnobtrusiveJavascriptJSON Model BindingGranular Input ValidationGlobal Action FiltersViewBagNuovi Action ResultSessionlessControllersPartial Page Output CacheHtml.Raw
NuGetAggiungere un riferimento senza NuGetAggiungere un riferimento con NuGet
demo
NuGetUn Package Manager per .NET e Visual StudioInstallabiletramite Extension ManagerUtilizzabiletramite:GUIConsole PowerShellTool a riga di comandoSupportasorgenti multiple (pubbliche e private)
RazorNuovo View Engine con sintassi concisaRisponde all’esigenza di sostituire la sintassi macchinosa del WebFormsEvita lo spaghetti-codeLa chiave è nel carattere @ che consente una transizione rapida da HTML a C#...…e nell’intelligenza del parser nel gestire la transizione inversa
demo
RazorCompatto, espressivo, fluidoFacile da apprendereNon richiede di impararenuovolinguaggioUtilizzabile con ogni editor di testoCompleto supporto Intellisense
ScaffoldingGenerazione automatica di codice MVCUtile per:Studiare un esempio funzionanteAvere una base di partenza da sviluppareUtilizzabile in modalità Console o GUIBasato su Template T4 e PowerShellEstensibile e personalizzabile
demo
DependencyInjectionConsente di risolvere i problemi di dipendenzaConcretizzazione del pattern astratto Inversion-of-ControlSupporto nativo in MVC tramite IDependencyResolverConsente di incapsulare facilmente uno IoC ContainerMolte implementazioni sono disponibili su NuGet
demo
Model ValidationIn MVC validare i dati = validare il ModelData Annotation come approccio di baseStile dichiarativo = attributiNon solo validazione ma anche per UISupporto sia lato-server che lato-clientLocalizzazione automatica con la possibilità di usare file di risorse
Model Validation
Model ValidationQuando avviene?In automatico durante il Model BindingA richiesta con il metodo TryUpdateModelCome si verificano i risultati?Proprietà ModelState.IsValid del ControllerIn automatico tramite HTML helpersCome personalizzare?Definendo nuovi attributiInserendo la validazione all’interno del Model
Model Validation
demo
Novità di ASP.NET MVC 3HelperMethodsUnobtrusiveJavascriptJSON Model BindingGranular Input ValidationGlobal Action FiltersViewBagNuovi Action ResultSessionlessControllersPartial Page Output CacheHtml.Raw
RoadMap di ASP.NET MVC 4L’obiettivo ambizioso è quello di «rendere MVC 4 la miglior piattaforma per creare rich web applications»AjaxHTML5, Tablet e MobileCloudAlcune nuove caratteristicheRecipeMobile SupportTask and Task<T> Support for AsyncControllerClasses…
RecipeDialog box scaricabili via NuGet che automatizzano passo dopo passo la realizzazione di un particolare task (griglie Ajax, autenticazione claim-based con WIF, ecc.)
Mobile supportImplementare un supporto first-class per il mobileMarkup e CSS pensati per scalare bene e nuovi Project templatePossibilità di creare viste con il suffisso .Mobile
Task and Task<T> Support for AsyncController ClassesSupporto alla keyword await per la programmazione asincrona
RisorseASP.NET MVCHome Page: http://www.asp.net/mvc/Forum: http://forums.asp.net/1146.aspxCodice sorgente: http://aspnet.codeplex.com/MVC Contrib: http://mvccontrib.codeplex.com/BlogScott Guthrie: http://weblogs.asp.net/scottgu/Phil Haack: http://haacked.com/Brad Wilson: http://bradwilson.typepad.com/Scott Hanselman: http://www.hanselman.com/
RisorseLibriProgramming 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

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

  • 1.
    ASP.NET MVC 3:Senon ora, quando?Giorgio Di Nardogiorgio.dinardo@domusdotnet.orghttp://blogs.ugidotnet.org/akelitz@akelitz
  • 2.
    AgendaUno sguardo:al passato…(cos’è ASP.NET MVC)  10 min…al presente… (le novità della versione 3)  30 minNuGetRazorScaffoldingDependencyInjectionModel Validation…… e al futuro (roadmapdella versione 4)  5 min
  • 3.
    Cos’è ASP.NET MVC?Unnuovo tipo di progetto disponibile in Visual Studio per applicazioni webL’implementazione Microsoft del pattern architetturale MVC (Model 2)Un’alternativa in più a nostra disposizioneNon sostituisce Web FormsAuto o moto? Cambio manuale o automatico?Progettato sulla stessa piattaforma ASP.NET
  • 4.
    Breve storia diASP.NET MVCASP.NET MVC 1.0Prototype: Feb 2007CTP: Dic 2007Beta: Ott 2008RC: Gen 2009RTW: Mar 2009ASP.NET MVC 2CTP: Lug 2009Beta: Nov 2009RC: Dic 2009RTM: Mar 2010ASP.NET MVC 3CTP: Lug 2010Beta: Ott 2010RC: Nov 2010RTM: Gen 2011
  • 5.
    Cos’è MVC?È unpattern architetturalePunta alla separazione delle responsabilità (SoC)È composto dalla triade Model-View-ControllerModel: rappresenta i dati e le regole per manipolarliView: è l’interfaccia utilizzata per presentare tali datiController: si occupa di gestire l’interazione tra l’utente e il sistemaÈ stato declinato in diverse varianti tra cui Model2
  • 6.
  • 7.
    Ciclo di vitadi una richiesta in ASP.NETASP.NETruntimeASP.NETWeb FormsHTTP HandlerASP.pagina_aspxPagina.aspxHTMLASP.NETMVCHTTP ModuleURL RoutingHTTP HandlerMVCHandlerViewProdottiControllerProdotti/1
  • 8.
    Ciclo di vitadi una richiesta con ASP.NET MVC
  • 9.
    Pilastri di ASP.NETMVCSeparationofconcerns (SoC)Ogni componente ha il suo ruolo precisoDon’t repeatyourself (DRY)TestabileTutti i componenti sono facilmente mockabiliPieno supporto alla DependencyInjection (DI)Non richiede che l’applicazione giri nel processo ASP.NETEstensibile e flessibileTutti i componenti sono liberamente sostituibiliConvention overconfiguration (CoC)
  • 10.
  • 11.
    Novità di ASP.NETMVC 3NuGetRazorDependencyInjectionScaffoldingModel ValidationHelperMethodsUnobtrusiveJavascriptJSON Model BindingGranular Input ValidationGlobal Action FiltersViewBagNuovi Action ResultSessionlessControllersPartial Page Output CacheHtml.Raw
  • 12.
    NuGetAggiungere un riferimentosenza NuGetAggiungere un riferimento con NuGet
  • 13.
  • 14.
    NuGetUn Package Managerper .NET e Visual StudioInstallabiletramite Extension ManagerUtilizzabiletramite:GUIConsole PowerShellTool a riga di comandoSupportasorgenti multiple (pubbliche e private)
  • 15.
    RazorNuovo View Enginecon sintassi concisaRisponde all’esigenza di sostituire la sintassi macchinosa del WebFormsEvita lo spaghetti-codeLa chiave è nel carattere @ che consente una transizione rapida da HTML a C#...…e nell’intelligenza del parser nel gestire la transizione inversa
  • 16.
  • 17.
    RazorCompatto, espressivo, fluidoFacileda apprendereNon richiede di impararenuovolinguaggioUtilizzabile con ogni editor di testoCompleto supporto Intellisense
  • 18.
    ScaffoldingGenerazione automatica dicodice MVCUtile per:Studiare un esempio funzionanteAvere una base di partenza da sviluppareUtilizzabile in modalità Console o GUIBasato su Template T4 e PowerShellEstensibile e personalizzabile
  • 19.
  • 20.
    DependencyInjectionConsente di risolverei problemi di dipendenzaConcretizzazione del pattern astratto Inversion-of-ControlSupporto nativo in MVC tramite IDependencyResolverConsente di incapsulare facilmente uno IoC ContainerMolte implementazioni sono disponibili su NuGet
  • 21.
  • 22.
    Model ValidationIn MVCvalidare i dati = validare il ModelData Annotation come approccio di baseStile dichiarativo = attributiNon solo validazione ma anche per UISupporto sia lato-server che lato-clientLocalizzazione automatica con la possibilità di usare file di risorse
  • 23.
  • 24.
    Model ValidationQuando avviene?Inautomatico durante il Model BindingA richiesta con il metodo TryUpdateModelCome si verificano i risultati?Proprietà ModelState.IsValid del ControllerIn automatico tramite HTML helpersCome personalizzare?Definendo nuovi attributiInserendo la validazione all’interno del Model
  • 25.
  • 26.
  • 27.
    Novità di ASP.NETMVC 3HelperMethodsUnobtrusiveJavascriptJSON Model BindingGranular Input ValidationGlobal Action FiltersViewBagNuovi Action ResultSessionlessControllersPartial Page Output CacheHtml.Raw
  • 28.
    RoadMap di ASP.NETMVC 4L’obiettivo ambizioso è quello di «rendere MVC 4 la miglior piattaforma per creare rich web applications»AjaxHTML5, Tablet e MobileCloudAlcune nuove caratteristicheRecipeMobile SupportTask and Task<T> Support for AsyncControllerClasses…
  • 29.
    RecipeDialog box scaricabilivia NuGet che automatizzano passo dopo passo la realizzazione di un particolare task (griglie Ajax, autenticazione claim-based con WIF, ecc.)
  • 30.
    Mobile supportImplementare unsupporto first-class per il mobileMarkup e CSS pensati per scalare bene e nuovi Project templatePossibilità di creare viste con il suffisso .Mobile
  • 31.
    Task and Task<T>Support for AsyncController ClassesSupporto alla keyword await per la programmazione asincrona
  • 32.
    RisorseASP.NET MVCHome Page:http://www.asp.net/mvc/Forum: http://forums.asp.net/1146.aspxCodice sorgente: http://aspnet.codeplex.com/MVC Contrib: http://mvccontrib.codeplex.com/BlogScott Guthrie: http://weblogs.asp.net/scottgu/Phil Haack: http://haacked.com/Brad Wilson: http://bradwilson.typepad.com/Scott Hanselman: http://www.hanselman.com/
  • 33.
    RisorseLibriProgramming Microsoft ASP.NETMVC (Microsoft)Professional ASP.NET MVC 3 (Wrox)Pro ASP.NET MVC 3 Framework(Apress)
  • 34.
    ASP.NET MVC 3:Senon ora, quando?Giorgio Di Nardogiorgio.dinardo@domusdotnet.orghttp://blogs.ugidotnet.org/akelitz@akelitz