SlideShare une entreprise Scribd logo
1  sur  40
ASP.NET MVC Framework
Simone Chiaretta
Solution Developer, Avanade
http://codeclimber.net.nz
27 Giugno 2008
Agenda
► Storia degli strumenti Microsoft per lo
sviluppo Web
► Introduzione ad ASP.NET MVC
► Pattern MVC
► ASP.NET MVC nel dettaglio
► Futuro di ASP.NET MVC
1
Storia degli strumenti Microsoft per lo
sviluppo Web
Prima c’era ASP “Classic”
3
Prima c’era ASP “Classic” - Storia
ASP (‘96 – 2000, IIS3 –> )
– Primo framework di sviluppo web integrato col
webserver
– Introduce le prime astrazioni per facilitare
l’interazione con il webserver
– Request
– Response
– Server
4
Prima c’era ASP “Classic” - Problemi
► Lascia completa libertà al programmatore =
– Codice e HTML sono mischiati (“spaghetti code”)
► Difficile separare implementazione e presentazione
5
<% Set oConn = Server.CreateObject("ADODB.Connection")
oConn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" &
Server.MapPath("DB.mdb")
Set rsUsers = Server.CreateObject("ADODB.Recordset")
rsUsers.Open "SELECT * FROM Users", oConn %>
<TABLE align="center" border="0" cellpadding="0" cellspacing="0"
width="100%">
<% do while not rsUsers.eof %>
<tr>
<td><%=rsUsers.fields(0)%></td>
<td><%=rsUsers.fields(2)%></td>
</tr>
<% rs.movenext
loop %>
</table>
<% rsUsers = Nothing
oConn = Nothing %>
Poi venne ASP.NET - Storia
► Cerca di risolvere il problema dello
“spaghetti code”
► Rilasciato Gen ‘02 con .NET 1.0
► Permette di adottare un approccio VB6-like
per lo sviluppo web.
► Nasce il concetto di
WebForm
6
Poi venne ASP.NET - WebForm
Poi venne ASP.NET - WebForm
► Ciclo di vita della pagina basato su eventi
► Programmazione basata su eventi
► UserControls e Control tree
► Nasconde la natura state-less delle web
application introducendo la gestione dello
stato
– Postback
– Session
– Application
– ViewState
8
Poi venne ASP.NET - Caratteristiche
► HTML e codice sono in due file distinti
(code-behind):
– .aspx: contiene HTML e webcontrols
– .aspx.cs: contiene il codice per manipolare i
webcontrols
9
<html
xmlns="http://www.w3.org/1999/xht
ml" >
<head runat="server“
<title>Sample page</title>
</head> <body>
<form id="form1" runat="server">
<div>
<asp:Label runat="server"
id="Label1" /> </div>
</form>
</body>
</html>
using System;
namespace Website
{
public partial class Page1 :
System.Web.UI.Page
{
protected Label Label1;
protected void Page_Load
(object sender, EventArgs e)
{
Label1.Text = "Hello ASP.NET";
}
}
}
Poi venne ASP.NET - Problemi
10
Page Lifecycle
troppo complesso
Poi venne ASP.NET - Problemi
Troppo
codice HTML
autogenerato
Poi venne ASP.NET - Problemi
Troppa “roba” da
portare in giro:
ViewState
Poi venne ASP.NET - Problemi
Inutilmente complesso
Poi venne ASP.NET – Soluzione ai Problemi
► Codice troppo accoppiato: pattern MVP, WCSF,
MonoRail
► HTML “brutto”: CSS Adapter Toolkit, templated
controls
► ViewState “ingombrante”: abilitarlo
selettivamente
14
Ma tutto ciò non è “out-of-the-box”
Introduzione a ASP.NET MVC
ASP.NET MVC to the rescue
Ritorno alla semplicità
ASP.NET MVC to the rescue – Storia
► Nasce per cercare di risolvere i problemi di
ASP.NET
► Annunciato da Scott Guthrie alla prima
ALT.NET conference di Austin a Ott ‘07
► Attualmente alla versione Preview3 (Giugno
‘08)
► “Obbliga” una maggior separazione delle
responsabilità
17
ASP.NET MVC – Caratteristiche
► Implementa il pattern Model-View-Controller
► Sviluppato per essere testabile
► Estendibile
► URL mapping engine
► Utilizza il modello webform per quel che
riguarda il rendering, ma non per il postback
► Supporta tutte le funzionalità pre-esistenti:
autenticazione, autorizzazione, caching,
session, providers, ecc…
18
Il Pattern MVC
MVC in Real Life
► Consegna della pizza
► L’utente parla al controller (prende l’ordine
per la pizza)
MVC in Real Life
► Il controller delega al model (il cuoco
riceve l’ordine)
MVC in Real Life
► Quando la pizza è pronta, viene data al
controller che delega alla view
(fattorino porta la pizza a casa)
Introduzione a MVC
► Introdotto per la prima volta in Smalltalk
nel ‘79
► “Di moda” negli ultimi anni grazie a Struts,
Spring MVC e Ruby on Rails
► Divide l’applicazione in 3 componenti:
– Model: la business logic dell’applicazione, che
contiene le informazioni sui dati
– View: rappresenta i dati nella UI visibile
dall’utente
– Controller: orchestra le operazioni, riceve l’input,
decide come recuperare i dati e li passa alla view
23
Il flusso di un’applicazione MVC
24
Model
View
Controller
1
5
2
4
3
B
r
o
w
s
e
r
La richiesta
arriva al
controller
Il Controller
chiede i dati
al Model
Il Model
restituisce i dati
al controller
Il controller
formatta i dati e li
passa alla view
La view costriusce
la pagina che viene
inivata al browser
ASP.NET MVC nel dettaglio
[with Demo]
Flusso della richiesta
Request
URL
Routing
Route
Route
Handler
Http
Handler
Controller
View
Factory View
Response
26
Routing
► Parte di ASP.NET 3.5 SP1
– System.Web.Routing.dll
► Url con parametri:
– {controller}, {action}, {parametri}
27
routes.MapRoute(
"Blog", //nome
"blog/{date}/{title}", //url
/*valori di default per i parametri*/
new {
controller = "Blog", //Controller
action = "Show", //Action
date = DateTime.Now, //Parametri
title = ""
}
);
Controller
► Classe con nome <NomeController>Controller
► Eredita da Controller
► Un metodo pubblico per Action
► Metodo restituisce ActionResult
28
public class BlogController : Controller
{
public ActionResult Show(DateTime date, string title)
{
ViewData["Titolo"] = title;
ViewData["Data"] = date;
return View();
//return View(“<viewName>", <viewdata>);
}
}
View – Loosely Typed
► E’ un normale WebForm che eredita da ViewPage
► DEVE SOLO costruire la UI HTML
► ViewData è +/- una HashTable
29
public partial class Show : ViewPage
{
//quasi sempre vuoto
}
<h2><%= Html.Encode(ViewData["Message"]) %></h2>
<%= ((DateTime)ViewData["Data"]).ToLongDateString()%>
View – Strongly Typed
► La view può anche essere strongly typed
– Complie time check
– Intellisense friendly 
► ViewData è una classe custom
30
public partial class StrongShow : ViewPage<PresentationModelClass>
{
//quasi sempre vuoto
}
<h2><%= Html.Encode(ViewData.Model.Message) %></h2>
<%= ViewData.Model.Data.ToLongDateString()%>
View – UI Helpers
► UI Helper per aiutare la scrittura di codice
HTML
– Html.ActionLink
– Html.ActionLink<ControllerClass>
– Html.Form
– Html.Form<ControllerClass>
31
Html.ActionLink(“Testo Link",“ActionName",“Controller", new {
parametri });
Html.ActionLink<ControllerClass>( c => c.ActionName(parametri),"
Testo Link");
Estendere MVC
► Tutto può essere esteso
– IControllerFactory
– StructureMapControllerFactory
– UnityControllerFactory
– SpringControllerFactory
– …
– IViewFactory
– BooViewEngine
– NHamlViewFactory
– …
► Quasi tutte le integazioni sono sviluppate
all’interno di MVCContrib:
http://www.codeplex.com/MVCContrib
32
Wrapping up…
ASP.NET MVC vs WebForms
► WebForms
– Sviluppo RAD
– Paradigma più simile allo sviluppo tradizionale
client-side
– Ottimo per “prototipare”
– Può diventare inmantenibile
► ASP.NET MVC
– Più codice da scrivere
– “Miglior” architettura dell’applicazione
– Maggior controllo su HTML
– Abilita uso di metodologie Agile
34
Stato di ASP.NET MVC
► Ora siamo alla Preview 3
► Routing ormai “stabile” (parte di ASP.NET 3.5
SP1)
► Nelle prossime Preview verranno indirizzati i
seguenti problemi:
– Integrazione “nativa” di Ajax
– Controlli con logica applicativa
35
Conclusioni
► ASP.NET MVC è un framework che ci permette di
scrivere buon software by default
► ASP.NET WebForm necessita di “lavoro” per
raggiungere lo stesso livello di pulizia
► ASP.NET MVC non è ASP.NET 4.0
– è un’alternativa, non un sostituto
36
Risorse
► http://asp.net/mvc/ - Sito ufficiale, con
download P3
► http://www.codeplex.com/aspnet - Codice
sorgente
► http://del.icio.us/tag/aspnetmvc - tutti gli
articoli su ASP.NET MVC
► http://polymorphicpodcast.com/shows/mvcresour
ces/ - lista “commentata” di risorse
► Blog di MS
– ScottGu: http://weblogs.asp.net/scottgu/default.aspx
– ScottHa: http://www.hanselman.com/blog/
– PhilHa: http://haacked.com/
37
Contatti – Simone Chiaretta
► MSN: simone_ch@hotmail.com
► Blog:
– English: http://codeclimber.net.nz/
– Italiano: http://blogs.ugidotnet.org/piyo/
38
Q&A
39

Contenu connexe

Tendances

SUE AGILE Framework (Italiano)
SUE AGILE Framework (Italiano)SUE AGILE Framework (Italiano)
SUE AGILE Framework (Italiano)Sabino Labarile
 
Customize ASP.NET Core scaffolding
Customize ASP.NET Core scaffoldingCustomize ASP.NET Core scaffolding
Customize ASP.NET Core scaffoldingAndrea Dottor
 
Sviluppo Web con React e Delphi - Seminario Delphi Day 2016, Piacenza
Sviluppo Web con React e Delphi - Seminario Delphi Day 2016, PiacenzaSviluppo Web con React e Delphi - Seminario Delphi Day 2016, Piacenza
Sviluppo Web con React e Delphi - Seminario Delphi Day 2016, PiacenzaMarco Breveglieri
 
What's new in Asp.Net 4.5 (and WebApi)
What's new in Asp.Net 4.5 (and WebApi)What's new in Asp.Net 4.5 (and WebApi)
What's new in Asp.Net 4.5 (and WebApi)Luca Milan
 
Blazor per uno sviluppatore Web Form
Blazor per uno sviluppatore Web FormBlazor per uno sviluppatore Web Form
Blazor per uno sviluppatore Web FormAndrea Dottor
 
Selenium e testing web - di Alessio Benedetti
Selenium e testing web - di Alessio BenedettiSelenium e testing web - di Alessio Benedetti
Selenium e testing web - di Alessio BenedettiGiuneco S.r.l
 
Blazor with .net 5 - di Gerardo Greco
Blazor with .net 5 - di Gerardo GrecoBlazor with .net 5 - di Gerardo Greco
Blazor with .net 5 - di Gerardo GrecoGiuneco S.r.l
 
Creare API pubbliche, come evitare gli errori comuni
 Creare API pubbliche, come evitare gli errori comuni Creare API pubbliche, come evitare gli errori comuni
Creare API pubbliche, come evitare gli errori comuniAndrea Dottor
 
ASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivatiASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivatiAndrea Dottor
 
Applicazioni Web ultra-performanti con Vue.js e Delphi
Applicazioni Web ultra-performanti con Vue.js e DelphiApplicazioni Web ultra-performanti con Vue.js e Delphi
Applicazioni Web ultra-performanti con Vue.js e DelphiMarco Breveglieri
 
Cloud Google App Engine Paas
Cloud   Google App Engine PaasCloud   Google App Engine Paas
Cloud Google App Engine Paassteccami
 
MVVM Cross &lt;3 Xamarin
MVVM Cross &lt;3 XamarinMVVM Cross &lt;3 Xamarin
MVVM Cross &lt;3 XamarinCorrado Cavalli
 
ASP.NET MVC 3 - Trasportare i dati nel Model
ASP.NET MVC 3 - Trasportare i dati nel ModelASP.NET MVC 3 - Trasportare i dati nel Model
ASP.NET MVC 3 - Trasportare i dati nel ModelManuel Scapolan
 

Tendances (20)

SUE AGILE Framework (Italiano)
SUE AGILE Framework (Italiano)SUE AGILE Framework (Italiano)
SUE AGILE Framework (Italiano)
 
Customize ASP.NET Core scaffolding
Customize ASP.NET Core scaffoldingCustomize ASP.NET Core scaffolding
Customize ASP.NET Core scaffolding
 
Sviluppo Web con React e Delphi - Seminario Delphi Day 2016, Piacenza
Sviluppo Web con React e Delphi - Seminario Delphi Day 2016, PiacenzaSviluppo Web con React e Delphi - Seminario Delphi Day 2016, Piacenza
Sviluppo Web con React e Delphi - Seminario Delphi Day 2016, Piacenza
 
What's new in Asp.Net 4.5 (and WebApi)
What's new in Asp.Net 4.5 (and WebApi)What's new in Asp.Net 4.5 (and WebApi)
What's new in Asp.Net 4.5 (and WebApi)
 
Blazor per uno sviluppatore Web Form
Blazor per uno sviluppatore Web FormBlazor per uno sviluppatore Web Form
Blazor per uno sviluppatore Web Form
 
MVC and Struts 1
MVC and Struts 1MVC and Struts 1
MVC and Struts 1
 
Selenium e testing web - di Alessio Benedetti
Selenium e testing web - di Alessio BenedettiSelenium e testing web - di Alessio Benedetti
Selenium e testing web - di Alessio Benedetti
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
 
Blazor with .net 5 - di Gerardo Greco
Blazor with .net 5 - di Gerardo GrecoBlazor with .net 5 - di Gerardo Greco
Blazor with .net 5 - di Gerardo Greco
 
Knockout.js
Knockout.jsKnockout.js
Knockout.js
 
Creare API pubbliche, come evitare gli errori comuni
 Creare API pubbliche, come evitare gli errori comuni Creare API pubbliche, come evitare gli errori comuni
Creare API pubbliche, come evitare gli errori comuni
 
ASP.NET
ASP.NETASP.NET
ASP.NET
 
Angularjs
AngularjsAngularjs
Angularjs
 
Inserire servizi
Inserire serviziInserire servizi
Inserire servizi
 
ASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivatiASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivati
 
ReactJS for beginners
ReactJS for beginnersReactJS for beginners
ReactJS for beginners
 
Applicazioni Web ultra-performanti con Vue.js e Delphi
Applicazioni Web ultra-performanti con Vue.js e DelphiApplicazioni Web ultra-performanti con Vue.js e Delphi
Applicazioni Web ultra-performanti con Vue.js e Delphi
 
Cloud Google App Engine Paas
Cloud   Google App Engine PaasCloud   Google App Engine Paas
Cloud Google App Engine Paas
 
MVVM Cross &lt;3 Xamarin
MVVM Cross &lt;3 XamarinMVVM Cross &lt;3 Xamarin
MVVM Cross &lt;3 Xamarin
 
ASP.NET MVC 3 - Trasportare i dati nel Model
ASP.NET MVC 3 - Trasportare i dati nel ModelASP.NET MVC 3 - Trasportare i dati nel Model
ASP.NET MVC 3 - Trasportare i dati nel Model
 

En vedette

Introduzione al Testing
Introduzione al TestingIntroduzione al Testing
Introduzione al TestingDotNetMarche
 
Futur pub dossierpresse
Futur pub dossierpresseFutur pub dossierpresse
Futur pub dossierpresseDenis Verloes
 
CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilit...
CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilit...CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilit...
CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilit...DotNetMarche
 
Dépliant memo-odr-web- High Co Data
Dépliant memo-odr-web- High Co DataDépliant memo-odr-web- High Co Data
Dépliant memo-odr-web- High Co DataDenis Verloes
 

En vedette (6)

Let's Go Mobile
Let's Go MobileLet's Go Mobile
Let's Go Mobile
 
Staying on top of social
Staying on top of socialStaying on top of social
Staying on top of social
 
Introduzione al Testing
Introduzione al TestingIntroduzione al Testing
Introduzione al Testing
 
Futur pub dossierpresse
Futur pub dossierpresseFutur pub dossierpresse
Futur pub dossierpresse
 
CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilit...
CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilit...CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilit...
CQRS ed Event Sourcing su Windows Azure: Applicazioni Distribuite, Scalabilit...
 
Dépliant memo-odr-web- High Co Data
Dépliant memo-odr-web- High Co DataDépliant memo-odr-web- High Co Data
Dépliant memo-odr-web- High Co Data
 

Similaire à Asp.NET MVC Framework

What's New in ASP.NET 4.5 and Visual Studio 2012
What's New in ASP.NET 4.5 and Visual Studio 2012What's New in ASP.NET 4.5 and Visual Studio 2012
What's New in ASP.NET 4.5 and Visual Studio 2012Andrea Dottor
 
Hands on MVC - Mastering the Web
Hands on MVC - Mastering the WebHands on MVC - Mastering the Web
Hands on MVC - Mastering the WebClaudio Gandelli
 
Fe02 ria con breeze e knockout
Fe02   ria con breeze e knockoutFe02   ria con breeze e knockout
Fe02 ria con breeze e knockoutDotNetCampus
 
Le novita di visual studio 2012
Le novita di visual studio 2012Le novita di visual studio 2012
Le novita di visual studio 2012Crismer La Pignola
 
Asp.Net MVC 3 - Il Model View Controller secondo Microsoft
Asp.Net MVC 3 - Il Model View Controller secondo MicrosoftAsp.Net MVC 3 - Il Model View Controller secondo Microsoft
Asp.Net MVC 3 - Il Model View Controller secondo MicrosoftStefano Benedetti
 
Sviluppo Web Agile Con MonoRail
Sviluppo Web Agile Con MonoRailSviluppo Web Agile Con MonoRail
Sviluppo Web Agile Con MonoRailStefano Ottaviani
 
Migliora il tuo codice con knockout.js
Migliora il tuo codice con knockout.jsMigliora il tuo codice con knockout.js
Migliora il tuo codice con knockout.jsAndrea Dottor
 
Yii Framework - yes it is rapid web application development (Parte 1)
Yii Framework - yes it is rapid web application development (Parte 1)Yii Framework - yes it is rapid web application development (Parte 1)
Yii Framework - yes it is rapid web application development (Parte 1)brossi676
 
Asp.Net MVC 2 :: VS 2010 Community Tour
Asp.Net MVC 2 :: VS 2010 Community TourAsp.Net MVC 2 :: VS 2010 Community Tour
Asp.Net MVC 2 :: VS 2010 Community TourAndrea Balducci
 
Alessandro Forte - ASP.Net 4.0
Alessandro Forte - ASP.Net 4.0Alessandro Forte - ASP.Net 4.0
Alessandro Forte - ASP.Net 4.0Alessandro Forte
 
Design pattern architetturali Model View Controller, MVP e MVVM
Design pattern architetturali   Model View Controller, MVP e MVVMDesign pattern architetturali   Model View Controller, MVP e MVVM
Design pattern architetturali Model View Controller, MVP e MVVMRiccardo Cardin
 
ASP.NET MVC 6 - uno sguardo al futuro
ASP.NET MVC 6 - uno sguardo al futuroASP.NET MVC 6 - uno sguardo al futuro
ASP.NET MVC 6 - uno sguardo al futuroAndrea Dottor
 
Sviluppo web con Ruby on Rails
Sviluppo web con Ruby on RailsSviluppo web con Ruby on Rails
Sviluppo web con Ruby on Railsjekil
 
ASP.NET MVC 2.0
ASP.NET MVC 2.0ASP.NET MVC 2.0
ASP.NET MVC 2.0XeDotNet
 
AngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webAngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webLuca Milan
 
E suap - tecnologie client
E suap - tecnologie client E suap - tecnologie client
E suap - tecnologie client Sabino Labarile
 

Similaire à Asp.NET MVC Framework (20)

What's New in ASP.NET 4.5 and Visual Studio 2012
What's New in ASP.NET 4.5 and Visual Studio 2012What's New in ASP.NET 4.5 and Visual Studio 2012
What's New in ASP.NET 4.5 and Visual Studio 2012
 
Hands on MVC - Mastering the Web
Hands on MVC - Mastering the WebHands on MVC - Mastering the Web
Hands on MVC - Mastering the Web
 
Fe02 ria con breeze e knockout
Fe02   ria con breeze e knockoutFe02   ria con breeze e knockout
Fe02 ria con breeze e knockout
 
Le novita di visual studio 2012
Le novita di visual studio 2012Le novita di visual studio 2012
Le novita di visual studio 2012
 
Novità di Asp.Net 4.0
Novità di Asp.Net 4.0Novità di Asp.Net 4.0
Novità di Asp.Net 4.0
 
ASP.NET MVC Intro
ASP.NET MVC IntroASP.NET MVC Intro
ASP.NET MVC Intro
 
Asp.Net MVC 3 - Il Model View Controller secondo Microsoft
Asp.Net MVC 3 - Il Model View Controller secondo MicrosoftAsp.Net MVC 3 - Il Model View Controller secondo Microsoft
Asp.Net MVC 3 - Il Model View Controller secondo Microsoft
 
Sviluppo Web Agile Con MonoRail
Sviluppo Web Agile Con MonoRailSviluppo Web Agile Con MonoRail
Sviluppo Web Agile Con MonoRail
 
MVC2: non solo tecnologia
MVC2: non solo tecnologiaMVC2: non solo tecnologia
MVC2: non solo tecnologia
 
Migliora il tuo codice con knockout.js
Migliora il tuo codice con knockout.jsMigliora il tuo codice con knockout.js
Migliora il tuo codice con knockout.js
 
Yii Framework - yes it is rapid web application development (Parte 1)
Yii Framework - yes it is rapid web application development (Parte 1)Yii Framework - yes it is rapid web application development (Parte 1)
Yii Framework - yes it is rapid web application development (Parte 1)
 
Asp.Net MVC 2 :: VS 2010 Community Tour
Asp.Net MVC 2 :: VS 2010 Community TourAsp.Net MVC 2 :: VS 2010 Community Tour
Asp.Net MVC 2 :: VS 2010 Community Tour
 
Powerful asp.net 4 e ie9
Powerful asp.net 4 e ie9Powerful asp.net 4 e ie9
Powerful asp.net 4 e ie9
 
Alessandro Forte - ASP.Net 4.0
Alessandro Forte - ASP.Net 4.0Alessandro Forte - ASP.Net 4.0
Alessandro Forte - ASP.Net 4.0
 
Design pattern architetturali Model View Controller, MVP e MVVM
Design pattern architetturali   Model View Controller, MVP e MVVMDesign pattern architetturali   Model View Controller, MVP e MVVM
Design pattern architetturali Model View Controller, MVP e MVVM
 
ASP.NET MVC 6 - uno sguardo al futuro
ASP.NET MVC 6 - uno sguardo al futuroASP.NET MVC 6 - uno sguardo al futuro
ASP.NET MVC 6 - uno sguardo al futuro
 
Sviluppo web con Ruby on Rails
Sviluppo web con Ruby on RailsSviluppo web con Ruby on Rails
Sviluppo web con Ruby on Rails
 
ASP.NET MVC 2.0
ASP.NET MVC 2.0ASP.NET MVC 2.0
ASP.NET MVC 2.0
 
AngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webAngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni web
 
E suap - tecnologie client
E suap - tecnologie client E suap - tecnologie client
E suap - tecnologie client
 

Plus de DotNetMarche

Creare una community dal basso ed arrivare ad un'azienda milionaria - Emanue...
Creare una community dal basso ed arrivare ad un'azienda milionaria  - Emanue...Creare una community dal basso ed arrivare ad un'azienda milionaria  - Emanue...
Creare una community dal basso ed arrivare ad un'azienda milionaria - Emanue...DotNetMarche
 
Metriche per Zombie Communities: come "iniettare vita" in tribù di morti vive...
Metriche per Zombie Communities: come "iniettare vita" in tribù di morti vive...Metriche per Zombie Communities: come "iniettare vita" in tribù di morti vive...
Metriche per Zombie Communities: come "iniettare vita" in tribù di morti vive...DotNetMarche
 
UI Composition - Prism
UI Composition - PrismUI Composition - Prism
UI Composition - PrismDotNetMarche
 
Model-View-ViewModel
Model-View-ViewModelModel-View-ViewModel
Model-View-ViewModelDotNetMarche
 
Refactoring ASP.NET and beyond
Refactoring ASP.NET and beyondRefactoring ASP.NET and beyond
Refactoring ASP.NET and beyondDotNetMarche
 
Refactoring 2TheMax (con ReSharper)
Refactoring 2TheMax (con ReSharper)Refactoring 2TheMax (con ReSharper)
Refactoring 2TheMax (con ReSharper)DotNetMarche
 
Silverlight in Action
Silverlight in ActionSilverlight in Action
Silverlight in ActionDotNetMarche
 
Silverlight in Action
Silverlight in ActionSilverlight in Action
Silverlight in ActionDotNetMarche
 
Soluzioni Microsoft per l'e-Learning
Soluzioni Microsoft per l'e-LearningSoluzioni Microsoft per l'e-Learning
Soluzioni Microsoft per l'e-LearningDotNetMarche
 
Installing and Administering MOSS
Installing and Administering MOSSInstalling and Administering MOSS
Installing and Administering MOSSDotNetMarche
 
Microsoft SharePoint Server 2007 Technical Overview
Microsoft SharePoint Server 2007 Technical OverviewMicrosoft SharePoint Server 2007 Technical Overview
Microsoft SharePoint Server 2007 Technical OverviewDotNetMarche
 
[Hands on] testing asp.net mvc
[Hands on] testing asp.net mvc[Hands on] testing asp.net mvc
[Hands on] testing asp.net mvcDotNetMarche
 
Introduzione a CardSpace
Introduzione a CardSpaceIntroduzione a CardSpace
Introduzione a CardSpaceDotNetMarche
 
Introduzione a Workflow Foundation
Introduzione a Workflow FoundationIntroduzione a Workflow Foundation
Introduzione a Workflow FoundationDotNetMarche
 
Domain Model e SOA (Service Oriented Architecture)
Domain Model e SOA (Service Oriented Architecture)Domain Model e SOA (Service Oriented Architecture)
Domain Model e SOA (Service Oriented Architecture)DotNetMarche
 

Plus de DotNetMarche (20)

Creare una community dal basso ed arrivare ad un'azienda milionaria - Emanue...
Creare una community dal basso ed arrivare ad un'azienda milionaria  - Emanue...Creare una community dal basso ed arrivare ad un'azienda milionaria  - Emanue...
Creare una community dal basso ed arrivare ad un'azienda milionaria - Emanue...
 
Metriche per Zombie Communities: come "iniettare vita" in tribù di morti vive...
Metriche per Zombie Communities: come "iniettare vita" in tribù di morti vive...Metriche per Zombie Communities: come "iniettare vita" in tribù di morti vive...
Metriche per Zombie Communities: come "iniettare vita" in tribù di morti vive...
 
WPF 4 fun
WPF 4 funWPF 4 fun
WPF 4 fun
 
UI Composition - Prism
UI Composition - PrismUI Composition - Prism
UI Composition - Prism
 
UI Composition
UI CompositionUI Composition
UI Composition
 
Model-View-ViewModel
Model-View-ViewModelModel-View-ViewModel
Model-View-ViewModel
 
WPF basics
WPF basicsWPF basics
WPF basics
 
Refactoring ASP.NET and beyond
Refactoring ASP.NET and beyondRefactoring ASP.NET and beyond
Refactoring ASP.NET and beyond
 
Refactoring 2TheMax (con ReSharper)
Refactoring 2TheMax (con ReSharper)Refactoring 2TheMax (con ReSharper)
Refactoring 2TheMax (con ReSharper)
 
jQuery Loves You
jQuery Loves YoujQuery Loves You
jQuery Loves You
 
Silverlight in Action
Silverlight in ActionSilverlight in Action
Silverlight in Action
 
Silverlight in Action
Silverlight in ActionSilverlight in Action
Silverlight in Action
 
Open XML & MOSS
Open XML & MOSSOpen XML & MOSS
Open XML & MOSS
 
Soluzioni Microsoft per l'e-Learning
Soluzioni Microsoft per l'e-LearningSoluzioni Microsoft per l'e-Learning
Soluzioni Microsoft per l'e-Learning
 
Installing and Administering MOSS
Installing and Administering MOSSInstalling and Administering MOSS
Installing and Administering MOSS
 
Microsoft SharePoint Server 2007 Technical Overview
Microsoft SharePoint Server 2007 Technical OverviewMicrosoft SharePoint Server 2007 Technical Overview
Microsoft SharePoint Server 2007 Technical Overview
 
[Hands on] testing asp.net mvc
[Hands on] testing asp.net mvc[Hands on] testing asp.net mvc
[Hands on] testing asp.net mvc
 
Introduzione a CardSpace
Introduzione a CardSpaceIntroduzione a CardSpace
Introduzione a CardSpace
 
Introduzione a Workflow Foundation
Introduzione a Workflow FoundationIntroduzione a Workflow Foundation
Introduzione a Workflow Foundation
 
Domain Model e SOA (Service Oriented Architecture)
Domain Model e SOA (Service Oriented Architecture)Domain Model e SOA (Service Oriented Architecture)
Domain Model e SOA (Service Oriented Architecture)
 

Asp.NET MVC Framework

  • 1. ASP.NET MVC Framework Simone Chiaretta Solution Developer, Avanade http://codeclimber.net.nz 27 Giugno 2008
  • 2. Agenda ► Storia degli strumenti Microsoft per lo sviluppo Web ► Introduzione ad ASP.NET MVC ► Pattern MVC ► ASP.NET MVC nel dettaglio ► Futuro di ASP.NET MVC 1
  • 3. Storia degli strumenti Microsoft per lo sviluppo Web
  • 4. Prima c’era ASP “Classic” 3
  • 5. Prima c’era ASP “Classic” - Storia ASP (‘96 – 2000, IIS3 –> ) – Primo framework di sviluppo web integrato col webserver – Introduce le prime astrazioni per facilitare l’interazione con il webserver – Request – Response – Server 4
  • 6. Prima c’era ASP “Classic” - Problemi ► Lascia completa libertà al programmatore = – Codice e HTML sono mischiati (“spaghetti code”) ► Difficile separare implementazione e presentazione 5 <% Set oConn = Server.CreateObject("ADODB.Connection") oConn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("DB.mdb") Set rsUsers = Server.CreateObject("ADODB.Recordset") rsUsers.Open "SELECT * FROM Users", oConn %> <TABLE align="center" border="0" cellpadding="0" cellspacing="0" width="100%"> <% do while not rsUsers.eof %> <tr> <td><%=rsUsers.fields(0)%></td> <td><%=rsUsers.fields(2)%></td> </tr> <% rs.movenext loop %> </table> <% rsUsers = Nothing oConn = Nothing %>
  • 7. Poi venne ASP.NET - Storia ► Cerca di risolvere il problema dello “spaghetti code” ► Rilasciato Gen ‘02 con .NET 1.0 ► Permette di adottare un approccio VB6-like per lo sviluppo web. ► Nasce il concetto di WebForm 6
  • 8. Poi venne ASP.NET - WebForm
  • 9. Poi venne ASP.NET - WebForm ► Ciclo di vita della pagina basato su eventi ► Programmazione basata su eventi ► UserControls e Control tree ► Nasconde la natura state-less delle web application introducendo la gestione dello stato – Postback – Session – Application – ViewState 8
  • 10. Poi venne ASP.NET - Caratteristiche ► HTML e codice sono in due file distinti (code-behind): – .aspx: contiene HTML e webcontrols – .aspx.cs: contiene il codice per manipolare i webcontrols 9 <html xmlns="http://www.w3.org/1999/xht ml" > <head runat="server“ <title>Sample page</title> </head> <body> <form id="form1" runat="server"> <div> <asp:Label runat="server" id="Label1" /> </div> </form> </body> </html> using System; namespace Website { public partial class Page1 : System.Web.UI.Page { protected Label Label1; protected void Page_Load (object sender, EventArgs e) { Label1.Text = "Hello ASP.NET"; } } }
  • 11. Poi venne ASP.NET - Problemi 10 Page Lifecycle troppo complesso
  • 12. Poi venne ASP.NET - Problemi Troppo codice HTML autogenerato
  • 13. Poi venne ASP.NET - Problemi Troppa “roba” da portare in giro: ViewState
  • 14. Poi venne ASP.NET - Problemi Inutilmente complesso
  • 15. Poi venne ASP.NET – Soluzione ai Problemi ► Codice troppo accoppiato: pattern MVP, WCSF, MonoRail ► HTML “brutto”: CSS Adapter Toolkit, templated controls ► ViewState “ingombrante”: abilitarlo selettivamente 14 Ma tutto ciò non è “out-of-the-box”
  • 17. ASP.NET MVC to the rescue Ritorno alla semplicità
  • 18. ASP.NET MVC to the rescue – Storia ► Nasce per cercare di risolvere i problemi di ASP.NET ► Annunciato da Scott Guthrie alla prima ALT.NET conference di Austin a Ott ‘07 ► Attualmente alla versione Preview3 (Giugno ‘08) ► “Obbliga” una maggior separazione delle responsabilità 17
  • 19. ASP.NET MVC – Caratteristiche ► Implementa il pattern Model-View-Controller ► Sviluppato per essere testabile ► Estendibile ► URL mapping engine ► Utilizza il modello webform per quel che riguarda il rendering, ma non per il postback ► Supporta tutte le funzionalità pre-esistenti: autenticazione, autorizzazione, caching, session, providers, ecc… 18
  • 21. MVC in Real Life ► Consegna della pizza ► L’utente parla al controller (prende l’ordine per la pizza)
  • 22. MVC in Real Life ► Il controller delega al model (il cuoco riceve l’ordine)
  • 23. MVC in Real Life ► Quando la pizza è pronta, viene data al controller che delega alla view (fattorino porta la pizza a casa)
  • 24. Introduzione a MVC ► Introdotto per la prima volta in Smalltalk nel ‘79 ► “Di moda” negli ultimi anni grazie a Struts, Spring MVC e Ruby on Rails ► Divide l’applicazione in 3 componenti: – Model: la business logic dell’applicazione, che contiene le informazioni sui dati – View: rappresenta i dati nella UI visibile dall’utente – Controller: orchestra le operazioni, riceve l’input, decide come recuperare i dati e li passa alla view 23
  • 25. Il flusso di un’applicazione MVC 24 Model View Controller 1 5 2 4 3 B r o w s e r La richiesta arriva al controller Il Controller chiede i dati al Model Il Model restituisce i dati al controller Il controller formatta i dati e li passa alla view La view costriusce la pagina che viene inivata al browser
  • 26. ASP.NET MVC nel dettaglio [with Demo]
  • 28. Routing ► Parte di ASP.NET 3.5 SP1 – System.Web.Routing.dll ► Url con parametri: – {controller}, {action}, {parametri} 27 routes.MapRoute( "Blog", //nome "blog/{date}/{title}", //url /*valori di default per i parametri*/ new { controller = "Blog", //Controller action = "Show", //Action date = DateTime.Now, //Parametri title = "" } );
  • 29. Controller ► Classe con nome <NomeController>Controller ► Eredita da Controller ► Un metodo pubblico per Action ► Metodo restituisce ActionResult 28 public class BlogController : Controller { public ActionResult Show(DateTime date, string title) { ViewData["Titolo"] = title; ViewData["Data"] = date; return View(); //return View(“<viewName>", <viewdata>); } }
  • 30. View – Loosely Typed ► E’ un normale WebForm che eredita da ViewPage ► DEVE SOLO costruire la UI HTML ► ViewData è +/- una HashTable 29 public partial class Show : ViewPage { //quasi sempre vuoto } <h2><%= Html.Encode(ViewData["Message"]) %></h2> <%= ((DateTime)ViewData["Data"]).ToLongDateString()%>
  • 31. View – Strongly Typed ► La view può anche essere strongly typed – Complie time check – Intellisense friendly  ► ViewData è una classe custom 30 public partial class StrongShow : ViewPage<PresentationModelClass> { //quasi sempre vuoto } <h2><%= Html.Encode(ViewData.Model.Message) %></h2> <%= ViewData.Model.Data.ToLongDateString()%>
  • 32. View – UI Helpers ► UI Helper per aiutare la scrittura di codice HTML – Html.ActionLink – Html.ActionLink<ControllerClass> – Html.Form – Html.Form<ControllerClass> 31 Html.ActionLink(“Testo Link",“ActionName",“Controller", new { parametri }); Html.ActionLink<ControllerClass>( c => c.ActionName(parametri)," Testo Link");
  • 33. Estendere MVC ► Tutto può essere esteso – IControllerFactory – StructureMapControllerFactory – UnityControllerFactory – SpringControllerFactory – … – IViewFactory – BooViewEngine – NHamlViewFactory – … ► Quasi tutte le integazioni sono sviluppate all’interno di MVCContrib: http://www.codeplex.com/MVCContrib 32
  • 35. ASP.NET MVC vs WebForms ► WebForms – Sviluppo RAD – Paradigma più simile allo sviluppo tradizionale client-side – Ottimo per “prototipare” – Può diventare inmantenibile ► ASP.NET MVC – Più codice da scrivere – “Miglior” architettura dell’applicazione – Maggior controllo su HTML – Abilita uso di metodologie Agile 34
  • 36. Stato di ASP.NET MVC ► Ora siamo alla Preview 3 ► Routing ormai “stabile” (parte di ASP.NET 3.5 SP1) ► Nelle prossime Preview verranno indirizzati i seguenti problemi: – Integrazione “nativa” di Ajax – Controlli con logica applicativa 35
  • 37. Conclusioni ► ASP.NET MVC è un framework che ci permette di scrivere buon software by default ► ASP.NET WebForm necessita di “lavoro” per raggiungere lo stesso livello di pulizia ► ASP.NET MVC non è ASP.NET 4.0 – è un’alternativa, non un sostituto 36
  • 38. Risorse ► http://asp.net/mvc/ - Sito ufficiale, con download P3 ► http://www.codeplex.com/aspnet - Codice sorgente ► http://del.icio.us/tag/aspnetmvc - tutti gli articoli su ASP.NET MVC ► http://polymorphicpodcast.com/shows/mvcresour ces/ - lista “commentata” di risorse ► Blog di MS – ScottGu: http://weblogs.asp.net/scottgu/default.aspx – ScottHa: http://www.hanselman.com/blog/ – PhilHa: http://haacked.com/ 37
  • 39. Contatti – Simone Chiaretta ► MSN: simone_ch@hotmail.com ► Blog: – English: http://codeclimber.net.nz/ – Italiano: http://blogs.ugidotnet.org/piyo/ 38