ASP.NET MVC

31
ASP.NET MVC 2 Raffaele Fanizzi MCPD & MCTS www.vifani.com

Transcript of ASP.NET MVC

Page 1: ASP.NET MVC

ASP.NET MVC 2

Raffaele FanizziMCPD & MCTSwww.vifani.com

Page 2: ASP.NET MVC

Agenda

• Design Pattern MVC• ASP.NET MVC 2– Overview– HTML Helper– Validazione

• MVC vs WebForm• Il futuro MVC 3• Q&A

Page 3: ASP.NET MVC

Design Pattern MVC

• Cosa è un design pattern?– Definisce la soluzione ad un problema

ricorrente di ingegneria del software– Serve a migliorare la qualità, la

testabilità, la manutenibilità, l’estendibilità, la leggibilità…

– Non va scelto ed usato per moda: deve risolvere un problema che esiste e non aiutarvi a crearne uno che non esiste • Evitate l’over-engeneering

Page 4: ASP.NET MVC

Design Pattern MVC

• Il Model View Controller (MVC) nasce nel 1979 ad opera di Trygve Reenskaug (Xerox PARC)

• E’ un design pattern dedicato al presentation layer

• Separation of concerns– Ha l’obiettivo di strutturare il software al

fine di separare la logica applicativa dall’interfaccia utente

Page 5: ASP.NET MVC

Design Pattern MVC

Controller

ModelView

Riceve l’input dall’utente e invoca operazioni sul modello definendo la view che ne visualizzerà lo stato

Effettua un cambiamento di stato richiamato dal controller e lo notifica alla view

Descrive la visualizzazione del modello

Page 6: ASP.NET MVC

Design Pattern MVC

• Controller: è l’orchestratore che definisce quale cambiamento di stato del modello richiamare in base all’input dell’utente

• Model: definisce i dati ed il loro comportamento

• View: definisce il modo in cui il modello deve essere rappresentato

Page 7: ASP.NET MVC

Design Pattern MVC

• Perché MVC? – Separation of concerns!!!– Sviluppo indipendente– Testabilità–Manutenibilità

Page 8: ASP.NET MVC

ASP.NET MVC 2

• E’ l’implementazione di Microsoft del pattern MVC applicata allo sviluppo web

• Storia– 13/03/2009 – ASP.NET MVC 1.0– 10/03/2010 – ASP.NET MVC 2.0

• E’ open source rilasciato sotto licenza Microsoft Public License

• Di cosa abbiamo bisogno?– .NET Framework 3.5 SP1 o superiore– Visual Studio 2008 + SDK– Visual Studio 2010

Page 9: ASP.NET MVC

ASP.NET MVC 2

Page 10: ASP.NET MVC

ASP.NET MVC 2

• View: pagine ASPX o ASCX che definiscono come viene renderizzato un modello

• Model: classi di qualsiasi tipo che contengono i dati che devono essere visualizzati mediante una view (spesso si parla di ViewModel)

• Controller: classi che ereditano dalla classe base Controller

Page 11: ASP.NET MVC

ASP.NET MVC 2

passiamo dalla teoria alla pratica

Page 12: ASP.NET MVC

HTML Helper

• C’erano una volta i tag runat=“server” di ASP.NET…

• …adesso abbiamo gli HTML helper– Evitano di dover scrivere a mano i tag

HTML– Particolarmente utili nella generazione

di• Form (anche con template )• Link• Rendering di view e action

Page 13: ASP.NET MVC

HTML HelperNome del metodo Input Output

Html.BeginFormHtml.EndForm

Nome del controller e/o dell’action su cui eseguire il post

Un tag form

Html.ActionLink Nome del controller e/o dell’action a cui puntare

Un anchor link che punta ad un controller e/o action

Html.CheckBoxHtml.DropDownListHtml.HiddenHtml.ListBoxHtml.PasswordHtml.RadioButtonHtml.TextAreaHtml.TextBox

Nome della proprietà su cui eseguire il binding e, opzionalmente, attributi html supplementari

Il tag HTML corrispondente al tipo di elemento da renderizzare

Html.DisplayHtml.Editor

Opzionalmente il nome della proprietà del modello e il nome del template

Un tag HTML per ogni proprietà del modello in visualizzazione / modifica

Html.RenderActionHtml.RenderPartial

Nome della view e/o dell’azione e/o del controller

L’output HTML della view o dell’azione di un controller

Page 14: ASP.NET MVC

HTML Helper

• In ASP.NET MVC le view possono essere non tipizzate o tipizzate dipendentemente dal fatto che il modello che renderizzano è o meno ben definito

• Se la view che si sta costruendo è tipizzata, allora per tutti gli HTML Helper che fanno riferimento a proprietà del modello con una stringa, esiste la controparte (con suffisso “For”) in cui è possibile utilizzare una lamba expression– Refactoring più sempliceNon tipizzata Tipizzata

Html.TextBox(“Name”) Html.TextBoxFor(p => p.Name)

Page 15: ASP.NET MVC

ASP.NET MVC 2

new HtmlHelperDemo().Show()

Page 16: ASP.NET MVC

Validazione

• Si basa sugli attributi presenti nel namespace System.ComponentModel.DataAnnotations introdotto nel .NET Framework 3.5 SP1

• Esiste un attributo per ogni regola di validazione messa a disposizione dal framework:– Required– StringLength– Range– RegularExpression

• Si applica al modello definendo una classe di metadati referenziata attraverso l’attributo MetadataType

Page 17: ASP.NET MVC

Validazione

• Per applicare le regole di validazione

• Per associare la classe dei metadata al modello

Page 18: ASP.NET MVC

Validazione

• Client Side: è necessario referenziare nelle view i seguenti file javascript– MicrosoftAjax.js– MicrosoftMvcAjax.js– MicrosoftMvcValidation.js

… ed inserire il tag

<% Html.EnableClientValidation();%>

• Server Side: si basa sull’interrogazione della proprietà ModelState del controller

Page 19: ASP.NET MVC

ASP.NET MVC 2

(demo) => { demo.ShowValidation(); }

Page 20: ASP.NET MVC

MVC vs WebForm

• ASP.NET MVC e WebForm non sono due API in conflitto– Rappresentano un modo diverso di fare

web application– Rispondono ad esigenze differenti– Hanno entrambi i loro pregi e difetti

Page 21: ASP.NET MVC

MVC vs WebForm

Page 22: ASP.NET MVC

MVC vs WebForm

• Pregi di ASP.NET WebForm– Risolve un enorme problema: la natura stateless

del protocollo HTTP– API stabile e matura

• Disponibili tantissimi controlli di terze parti

– RAD– Porta sul web la programmazione event-driven– Racchiude l’intero web stack in un ricco object-

model• Conoscere HTML, CSS e Javascript non è un requisito

per usare ASP.NET WebForm

– Adaptive Rendering

Page 23: ASP.NET MVC

MVC vs WebForm

• Difetti di ASP.NET WebForm– Programmazione event-driven => difficoltà

nell’eseguire la Separation of Concerns– Difficile da testare in modo automatico– Generazione automatica HTML == scarso controllo

sull’output• Problemi di compatibilità con i browser• Accessibilità

– Poco SEO Friendly• Button e LinkButton sono difficili da tracciare per gli

spider• URL spesso poco significativi• Il ViewState può abbassare il rank delle pagine

Page 24: ASP.NET MVC

MVC vs WebForm

• Quando usare MVC?

Page 25: ASP.NET MVC

MVC vs WebForm

• Pregi di ASP.NET MVC– Separation of concerns• Si progettano le view, i controller e il

modello• Si accede al middle-tier dal controller

– Pieno controllo sull’output generato: HTML, Javascript e CSS

– SEO Friendly by design– Piena testabilità => è possibile il TDD

Page 26: ASP.NET MVC

MVC vs WebForm

• Difetti di ASP.NET MVC– Peggiore curva di apprendimento

• Sfavorisce l’apprendimento da sperimentazione

• Richiede che il software sia progettato

– Richiede skill forti su HTML, CSS e Javascript

–Meno maturo di WebForm• Due release in due anni, la terza sta arrivando• Pochi helper di terze parti

Page 27: ASP.NET MVC

Il futuro MVC 3

• Attualmente in Release Candidate• Non ci sono particolari breaking changes• Migliorato il processo “New Project”• Sessionless Controllers• Nuovi attributi di validazione (Compare, Remote)• Cache delle azioni del controller• Supporto delle nuove librerie jQuery Unobtrusive

per la validazione ed AJAX• Nuovo view engine Razor• Miglior supporto alla Dependency Injection

Page 28: ASP.NET MVC

Risorse

• Sito ufficiale ASP.NET MVChttp://www.asp.net/mvc

• Source code ASP.NET MVChttp://aspnet.codeplex.com

• Release Candidate ASP.NET MVC 3http://www.asp.net/mvc/mvc3

• MSDNhttp://msdn.microsoft.com

• Il mio bloghttp://www.vifani.com

Page 29: ASP.NET MVC

Domande?

Page 30: ASP.NET MVC

Grazie per l’attenzione

Page 31: ASP.NET MVC

© 2009 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.

The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after

the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.