ݺߣ

ݺߣShare a Scribd company logo
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}/", //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

More Related Content

What's hot (20)

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 scaffolding
Andrea 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, Piacenza
Marco 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 Form
Andrea Dottor
MVC and Struts 1
MVC and Struts 1MVC and Struts 1
MVC and Struts 1
Tarin Gamberini
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
Giuneco 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 Greco
Giuneco S.r.l
Knockout.js
Knockout.jsKnockout.js
Knockout.js
Manuel Scapolan
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
Andrea Dottor
ASP.NET
ASP.NETASP.NET
ASP.NET
Manuel Scapolan
Angularjs
AngularjsAngularjs
Angularjs
Francesco Portus
Inserire servizi
Inserire serviziInserire servizi
Inserire servizi
giocoscuola
ASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivatiASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivati
Andrea Dottor
ReactJS for beginners
ReactJS for beginnersReactJS for beginners
ReactJS for beginners
Ilaria Franchini
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
Marco Breveglieri
Cloud Google App Engine Paas
Cloud   Google App Engine PaasCloud   Google App Engine Paas
Cloud Google App Engine Paas
steccami
MVVM Cross &lt;3 Xamarin
MVVM Cross &lt;3 XamarinMVVM Cross &lt;3 Xamarin
MVVM Cross &lt;3 Xamarin
Corrado 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 Model
Manuel Scapolan
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 scaffolding
Andrea 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, Piacenza
Marco 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 Form
Andrea 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 Benedetti
Giuneco 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 Greco
Giuneco 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 comuni
Andrea Dottor
ASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivatiASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivati
Andrea 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 Delphi
Marco Breveglieri
Cloud Google App Engine Paas
Cloud   Google App Engine PaasCloud   Google App Engine Paas
Cloud Google App Engine Paas
steccami
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
Manuel Scapolan

Viewers also liked (6)

Let's Go Mobile
Let's Go MobileLet's Go Mobile
Let's Go Mobile
Sundin Associates
Staying on top of social
Staying on top of socialStaying on top of social
Staying on top of social
Sundin Associates
Introduzione al Testing
Introduzione al TestingIntroduzione al Testing
Introduzione al Testing
DotNetMarche
Futur pub dossierpresseFutur pub dossierpresse
Futur pub dossierpresse
Denis 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 DataDépliant memo-odr-web- High Co Data
Dépliant memo-odr-web- High Co Data
Denis Verloes
Futur pub dossierpresseFutur pub dossierpresse
Futur pub dossierpresse
Denis 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 DataDépliant memo-odr-web- High Co Data
Dépliant memo-odr-web- High Co Data
Denis Verloes

Similar to 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
Andrea Dottor
Hands on MVC - Mastering the Web
Hands on MVC - Mastering the WebHands on MVC - Mastering the Web
Hands on MVC - Mastering the Web
Claudio Gandelli
Fe02 ria con breeze e knockout
Fe02   ria con breeze e knockoutFe02   ria con breeze e knockout
Fe02 ria con breeze e knockout
DotNetCampus
Novità di Asp.Net 4.0
Novità di Asp.Net 4.0Novità di Asp.Net 4.0
Novità di Asp.Net 4.0
Gian Maria Ricci
ASP.NET MVC Intro
ASP.NET MVC IntroASP.NET MVC Intro
ASP.NET MVC Intro
Manuel Scapolan
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
Stefano Benedetti
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
Andrea 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 Tour
Andrea Balducci
Powerful asp.net 4 e ie9
Powerful asp.net 4 e ie9Powerful asp.net 4 e ie9
Powerful asp.net 4 e ie9
Stefano Benedetti
Alessandro Forte - ASP.Net 4.0
Alessandro Forte - ASP.Net 4.0Alessandro Forte - ASP.Net 4.0
Alessandro Forte - ASP.Net 4.0
Alessandro 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 MVVM
Riccardo 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 futuro
Andrea Dottor
Sviluppo web con Ruby on Rails
Sviluppo web con Ruby on RailsSviluppo web con Ruby on Rails
Sviluppo web con Ruby on Rails
jekil
ASP.NET MVC 2.0
ASP.NET MVC 2.0ASP.NET MVC 2.0
ASP.NET MVC 2.0
XeDotNet
AngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webAngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni web
Luca Milan
E suap - tecnologie client
E suap - tecnologie client E suap - tecnologie client
E suap - tecnologie client
Sabino Labarile
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
Andrea Dottor
Hands on MVC - Mastering the Web
Hands on MVC - Mastering the WebHands on MVC - Mastering the Web
Hands on MVC - Mastering the Web
Claudio Gandelli
Fe02 ria con breeze e knockout
Fe02   ria con breeze e knockoutFe02   ria con breeze e knockout
Fe02 ria con breeze e knockout
DotNetCampus
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
Stefano Benedetti
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
Andrea 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 Tour
Andrea Balducci
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
Riccardo 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 futuro
Andrea Dottor
Sviluppo web con Ruby on Rails
Sviluppo web con Ruby on RailsSviluppo web con Ruby on Rails
Sviluppo web con Ruby on Rails
jekil
AngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webAngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni web
Luca Milan

More from 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...
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
WPF 4 fun
WPF 4 funWPF 4 fun
WPF 4 fun
DotNetMarche
UI Composition - Prism
UI Composition - PrismUI Composition - Prism
UI Composition - Prism
DotNetMarche
UI Composition
UI CompositionUI Composition
UI Composition
DotNetMarche
Model-View-ViewModel
Model-View-ViewModelModel-View-ViewModel
Model-View-ViewModel
DotNetMarche
WPF basics
WPF basicsWPF basics
WPF basics
DotNetMarche
Refactoring ASP.NET and beyond
Refactoring ASP.NET and beyondRefactoring ASP.NET and beyond
Refactoring ASP.NET and beyond
DotNetMarche
Refactoring 2TheMax (con ReSharper)
Refactoring 2TheMax (con ReSharper)Refactoring 2TheMax (con ReSharper)
Refactoring 2TheMax (con ReSharper)
DotNetMarche
jQuery Loves You
jQuery Loves YoujQuery Loves You
jQuery Loves You
DotNetMarche
Silverlight in Action
Silverlight in ActionSilverlight in Action
Silverlight in Action
DotNetMarche
Silverlight in Action
Silverlight in ActionSilverlight in Action
Silverlight in Action
DotNetMarche
Open XML & MOSS
Open XML & MOSSOpen XML & MOSS
Open XML & MOSS
DotNetMarche
Soluzioni Microsoft per l'e-Learning
Soluzioni Microsoft per l'e-LearningSoluzioni Microsoft per l'e-Learning
Soluzioni Microsoft per l'e-Learning
DotNetMarche
Installing and Administering MOSS
Installing and Administering MOSSInstalling and Administering MOSS
Installing and Administering MOSS
DotNetMarche
Microsoft SharePoint Server 2007 Technical Overview
Microsoft SharePoint Server 2007 Technical OverviewMicrosoft SharePoint Server 2007 Technical Overview
Microsoft SharePoint Server 2007 Technical Overview
DotNetMarche
[Hands on] testing asp.net mvc
[Hands on] testing asp.net mvc[Hands on] testing asp.net mvc
[Hands on] testing asp.net mvc
DotNetMarche
Introduzione a CardSpace
Introduzione a CardSpaceIntroduzione a CardSpace
Introduzione a CardSpace
DotNetMarche
Introduzione a Workflow Foundation
Introduzione a Workflow FoundationIntroduzione a Workflow Foundation
Introduzione a Workflow Foundation
DotNetMarche
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
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
Refactoring ASP.NET and beyond
Refactoring ASP.NET and beyondRefactoring ASP.NET and beyond
Refactoring ASP.NET and beyond
DotNetMarche
Refactoring 2TheMax (con ReSharper)
Refactoring 2TheMax (con ReSharper)Refactoring 2TheMax (con ReSharper)
Refactoring 2TheMax (con ReSharper)
DotNetMarche
Soluzioni Microsoft per l'e-Learning
Soluzioni Microsoft per l'e-LearningSoluzioni Microsoft per l'e-Learning
Soluzioni Microsoft per l'e-Learning
DotNetMarche
Installing and Administering MOSS
Installing and Administering MOSSInstalling and Administering MOSS
Installing and Administering MOSS
DotNetMarche
Microsoft SharePoint Server 2007 Technical Overview
Microsoft SharePoint Server 2007 Technical OverviewMicrosoft SharePoint Server 2007 Technical Overview
Microsoft SharePoint Server 2007 Technical Overview
DotNetMarche
[Hands on] testing asp.net mvc
[Hands on] testing asp.net mvc[Hands on] testing asp.net mvc
[Hands on] testing asp.net mvc
DotNetMarche
Introduzione a CardSpace
Introduzione a CardSpaceIntroduzione a CardSpace
Introduzione a CardSpace
DotNetMarche
Introduzione a Workflow Foundation
Introduzione a Workflow FoundationIntroduzione a Workflow Foundation
Introduzione a Workflow Foundation
DotNetMarche
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

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}/", //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