View
5.265
Download
1
Category
Preview:
DESCRIPTION
L’aumento della complessità delle applicazioni e la velocità di realizzazione richiesta al giorno d’oggi, hanno obbligato gli sviluppatori ad utilizzare metodologie formali per la scrittura di codice e il successivo testing dello stesso al fine di minimizzare i tempi di rilascio. L’utilizzo dei pattern, ossia di convenzioni condivise dalla community dei programmatori, è una pratica sempre più diffusa e adottata anche per applicazioni Web. L’ormai trentennale pattern Model-View-Controller (MVC) sta attualmente conoscendo una nuova giovinezza grazie al successo di framework nelle applicazioni Web che lo usano come riferimento. Rails è il framework MVC più famoso e diffuso, implementato per la piattaforma Ruby, mentre ASP.NET MVC e MonoRail sono i due framework web MVC che stanno riscuotendo il maggiore successo per lo sviluppo su .NET e su Windows. Conosceremo quindi la filosofia di riferimento e le specificità dei due framework tramite due implementazioni reali di una stessa applicazione e ne discuteremo vantaggi e svantaggi.
Citation preview
Model View Controller
Semplificare il codice e minimizzare i tempi!
Manuel Scapolan info@manuelscapolan.it
Marco Parenzan marco.parenzan@libero.it
10 dicembre 2009
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
Agenda
• Il “passato”: Web Forms
• Il “presente”(?): Model
• il “futuro”: MVC
– Alcuni accenni tecnologici
• Demo: MonoRail
• Demo: ASP.NET MVC
• Conclusioni
– Q&A
2
Model View Controller
Semplificare il codice e minimizzare i tempi!
Web Forms
DEMO
Model View Controller
Semplificare il codice e minimizzare i tempi!
Una pagina ASP.NET Web Forms
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
Vantaggi di WebForm
• Web Form ASP.NET è stabile e maturo ed è
supportato da molti strumenti e controlli di
terze parti
• Metafora di click tipica dello sviluppo desktop di
Windows
• Astrazione dalle conoscenze di HTML e
JavaScript recuperando invece le conoscenze dei
programmatori Windows
– Necessario introdurre PostBack e ViewState
– Necessario solo .NET
• Forte componentizzazione
• Autocaricamento dei controlli
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
Svantaggi di WebForm
• Mancanza della Separation of Concerns
• Non è possibile testare una pagina aspx
• Statefulness difficile da controllare (a scapito
delle prestazioni)
• Difficoltà di accesso ai recenti framework
JavaScript (come jQuery, Dojo e PrototypeJS)
• Il postback rende poco SEO
– Alcuni motori di ricerca addirittura declassano la
pagina
Model View Controller
Semplificare il codice e minimizzare i tempi!
Introduzione al MVC
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
Ritorno alle origini
Il web è semplicemente:
• GET
Riceve dati dal server. I parametri sono passati
attraverso l'indirizzo.
• POST
Invia i dati al server per salvarli o perchè siano
elaborati. I parametri vengono passati nel corpo
della richiesta con la forma:
nome1=valore1&nome2=valore2
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!Cos‟è MVC?
• MODEL
– La rappresentazione (specifica per il dominio) dei dati
su cui l‟applicazione opera
• VIEW
– Renderizza il modello in una forma utile
all‟interazione, tipicamente un elemento di interfaccia
utente
– Ci possono essere più viste (rappresentazioni) per un
singolo modello e per finalità diverse
• CONTROLLER
– Riceve l‟input, coordina l‟elaborazione sul model e
dispaccia tutto alla view
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!Cos‟è MVC?
• Model–View–Controller (MVC) è un pattern
architetturale usato in ingegneria del software
• Il pattern isola la business logic dalla
presentation, permettendo:
– Testing
– Indipendenza nello sviluppo
• Non è un concetto nuovo
• Separation of Concerns
– “Separate content from presentation and data-
processing (model) from content.” --Wikipedia
– Originario di SmallTalk nel 1979
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
Separation of Concerns
• Questa strutturazione, basata sulla separazione
dei concetti, ha una validità comprovata da
tantissime applicazioni web già realizzate (non
solo MVC)
– Separare la vista dalla logica applicativa permette di
ridisegnare l‟estetica del sito senza toccare la logica.
Questo permette di far interagire in maniera più
produttiva un web designer con il web programmer
– È possibile cambiare la tecnologia di implementazione
delle viste
– Spesso è necessario modificare la logica
dell‟applicazione senza che per questo debba essere
modificata l‟estetica
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
MVC vs WebForms
MVC WebForms
FilterLogica comune (log,
security, ...)
ControllerPrende le decisioni
ed usufruisce dei
servizi
ViewPresenta i dati
FilterLogica comune
(trace, log, error
handling, ...)
PageCode-behind
PageCodice di markup
ControlsCodice di markup
Controlscode-behind
Fonte: Monorail presentation at WebDevelopersCommunity,
Febbraio 2009 (Ken Egozi)
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
Per chi sono i framework MVC?
• A chi interessa REST
– Gli Url sono puliti
• A chi interessa SEO
– L‟HTML “pulito” è importante
• Chi preferisce “convention over configuration”
– Oltre all‟MVC, CoC è l‟approccio tipico di Ruby on Rails
• Per chi il testing è importante
• Per chi preferisce lavorare con gli elementi base
del Web
– HTML, Javascript, CSS
• Per chi preferisce i patterns, le astrazioni
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
REST è importante
• Representational state transfer (REST) è un tipo
di architettura software per i sistemi di ipertesto
distribuiti come il World Wide Web
• REST prevede che la scalabilità del Web e la
crescita siano diretti risultati di pochi principi
chiave di progettazione
• Lo stato dell'applicazione e le funzionalità sono
divisi in Risorse WEB
• Ogni risorsa è unica e indirizzabile
usando sintassi universale per uso nei link
ipertestuali
• Tutte le risorse sono condivise come interfaccia
uniforme per il trasferimento di stato tra client
e risorse
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
Url
• Gli Url non puntano più ad una pagina fisica
• Un Url è mappato su un controller
– C‟è maggiore flessibilità
– C‟è un routing engine basato sugli Url, con una route
table
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
SEO è importante
• Url più comprensibili e “significativi”
– http://www.host.com/Products/CatalogItem.aspx?id=6
– http://www.host.com/Products/Televisions/Catalog/6
• I motodi di ricerca penalizzano url non statici
che non possono riprodurre
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
HTML pulito è importante
• Non c‟è più necessità di un ViewState o di un
ControlState
• Risposta HTTP più compatta
– Migliore scalabilità
– Migliori performances
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
Convention over Configuration
• Configuration
– Informazioni memorizzate in web.config
• Convention
– Seguire le “regole”
• Nomi delle classi
• Nomi delle cartelle
– Alcune possono essere sovrascritte, altre no
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
Struttura delle cartelle
• I framework MVC enfatizzano il principio “convenzione su configurazione”– Ci sono delle locazioni standard per ogni tipo di file
• Content– Contiene tutti i contenuti statici (immagini, file css)
• Controllers– Classi controller
• Models– Classi del modello
• Scripts– Contiene i files Javascript, compresi Ajaxe jQuery
• Views– Contiene le viste
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
Test-Driven Development
• Il TDD è una metodologia che mette lo sviluppo dei test prima di tutto
– Spesso si scrive il codice di test prima del codice stesso!
• Ci sono tre momenti (Red/Green/Refactor) nello sviluppo TDD:
– Scrivere uno unit test che fallisce (Red)
– Scrivere un test che passa (Green)
– Rifattorizzare il codice (Refactor)
• Vantaggi
– Si scrive prima di tutto il codice strettamente necessario a passare il test
– Ci si concentra su “come” il codice verrà usato (il codice è spesso migliore, più
chiaro)
– I test diventano “parte integrante” dello sviluppo stesso. Servono soprattutto
nel momento in cui si arriva vicino alla deadline!
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
Per chi preferisce lavorare con gli elementi base del Web
• ID dei tag “deterministici”
– <div id=“ctl_000_ctl001_textbox”>…</div>
• Javascript is a first-class citizen
– built-in support for „unobtrusive javascript‟
– built-in support per JSON
– built-in support per partial page rendering
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
Per chi importa i pattern
• Basta con “double-click here” e codice
organizzato in Event Hadlers
• Approccio invece più object oriented
– Si deriva da classi base
– Override di metodi astratti o virtuali
– Implementare le interfacce
Model View Controller
Semplificare il codice e minimizzare i tempi!
Alcuni concetti
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
Controller
• È il centro del modello MVC
• Ogni richiesta (HTTP) è gestita da un controller e
renderizzata da una View
• Senza un controller presentazione e business logic
sarebbero contenute direttamente nella view
– No testability
– No Separation of Conterns
– No Single Responsability
• Il controller è una classe
• La action di un controller è una “Single Responsibility”
• L‟algoritmo di default implementato in MVC per invocare
una action è una “Convention over Configuration”
– Es. In /Product/Details viene invocato il metodo Details()
della classe ProductController
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
Consigli per una ControllerAction
• Sono funzioni di coordinamento per la
presentazione
– Tutte le logiche dovrebbero stare in un‟altra classe
• Sono una interfaccia
– Vale anche per i servizi Web
• Non dovrebbero contenere funzioni di accesso ai
dati
– Es. Usare il Repository Pattern
– “Se una ControllerAction non sta in uno schermo, forse
porta dietro più di una responsabilità”
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
“No more file mapping”
• In precedenza non aveva il controllo degli Url
– Filosofia della pubblicazione dei files (aspx, ashx, php,
jsp …)
– <path fisico>=Server.MapPath(<path logico>)
– = Path.Combine(<physical root>, <virtual path>)
• Non molto RESTful
• Per avere il controllo degli UrlUrl Rewriting
– Mappatura di un Url web “qualsiasi” su un path (cioè su
file)
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
Controller Actions vs. Urls
• Quale è la relazione tra Controller Actions e Url
– /Product/Index
• Invoca l‟azione Index sul controller ProductController
– /Product
• Invoca l‟azione Index sul controller ProductController
– /Product/Help
• Invoca l‟azione Help sul controller ProductController
– /Product/Details/34
• Invoca l‟azione Details sul controller ProductController, passando come
argomento 34 come Id
• Da dove salta fuori l‟Id?
• Il template di riferimento per gli Url è
– {controller}[/{action}[/{id}]]
– Si può customizzare intervenendo nel file Global.asax (si vedrà dopo)
• Da notare come il Controller si chiami “ProductController”, cioè
con “Controller” finale
– Si usa chiamare un controller con il nome+”Controller” finale, per
essere “rimosso” in fase di Url
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
Usare uno o più ViewEngine(s)
• ASP.NET Web Forms— ASP.NET MVC viene fornito con il motore di
visualizzazione di ASP.NET. Ma molti altri sono disponibili– NHaml (pronounced enamel)— NHaml is an implementation of the popular RAILS Haml view
engine for the ASP.NET MVC framework. Distributed under the open source MIT license.
• http://code.google.com/p/nhaml
– Spark— The idea behind the Spark view engine is to allow "the HTML to dominate the flow
and the code to fit seamlessly."
• http://dev.dejardin.org
– Brail— A port of the Brail view engine from MonoRail to the ASP.NET MVC framework. The
Brail view engine is part of the MVCContrib project.
• www.codeplex.com/MVCContrib
– nVelocity— The nVelocity view engine is a port of the Java Apache Software Foundation
Velocity project to the .NET framework. The nVelocity view engine is part of the
MVCContrib project.
• http://www.codeplex.com/MVCContrib
Model View Controller
Semplificare il codice e minimizzare i tempi!
MonoRail
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
MonoRail
• MVC Framework:
– Open source, Apache licence
– Costruito sulla pipeline di ASP.NET:
• Session
• Http Modules
• Authentication/Authorization
• Caching
• etc.
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
Come funziona
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
Convention over Configuration
URL <-> Action Model View Controller
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
Convention over Configuration
./Views/product/view.vm
ControllerView
View Engine
Model View Controller
Per default viene caricata la vista che ha lo
stesso nome della action, ma posso
specificare da codice quale vista caricare:
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
MonoRail in action (1)
• Mappare l'estensione .rails sul filtro aspnet_isapi
34
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
MonoRail in action (2)
• Aggiungere sezione di configurazione nel Web.config
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
MonoRail in action (3)
• Aggiungere i riferimenti alle librerie:
• Castle.Core
• Castle.MonoRail.Framework
• Castle.MonoRail.Framework.Views.NVelocity
• NVelocity
Dipendono dal view engine utilizzato
DEMO
Model View Controller
Semplificare il codice e minimizzare i tempi!
MonoRail
Model View Controller
Semplificare il codice e minimizzare i tempi!
ASP.NET MVC
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
ASP.NET MVC
• È l‟implementazione di Microsoft del pattern
Model-View-Controller in un framework per il
Web in .NET
– Shared source
– Costruito sulla pipeline di ASP.NET:
• Session
• Http Modules
• Authentication/Authorization
• Caching
• etc.
• È una alternativa alle WebForm applications
• È un framework altamente modulare ed
estensibile
• È un framework REST-friendly
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
Come funziona
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
Convention over Configuration
URL <-> Action Model View Controller
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
Routing Engine
URL <-> Action Model View Controller
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
Convention over Configuration
./Views/products/view.aspx
ControllerView
View Engine
Model View Controller
Per default viene caricata la vista che ha lo
stesso nome della action, ma posso
specificare da codice quale vista caricare:
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
ASP.NET MVC in action (1)
• Mappare l'estensione .mvc sul filtro aspnet_isapi
– Solo se siamo in IIS 5.x/6.x
44
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
ASP.NET MVC in action (2)
• Web.config IIS 5.x/6.x
• Web.config IIS 7.x
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
ASP.NET MVC in action (3)
• Aggiungere i riferimenti alle
librerie:
• System.Web.Mvc
• System.Web.Routing
• …eventuali ViewEngine
• Non fa parte del .NET
Framework 3.5sp1
– Farà parte del .NET Framework
4.0 (ASP.NET MVC 2.0)
Lo stack ASP.NET aggiornato
.NET Framework 3.5sp1 •Common-Language Runtime 2.0•Base Class Library 3.5
ASP.NET Runtime
•HttpApplication•HttpContext•HttpRequest•HttpResponse
•HttpRuntime•HttpUtility•IHttpHandler•IHttpModule•Authorization
•Authentication•Membership•Caching
ASPX Pages •MasterPages•Themes, Skins•General Templating
ASP.NET WebForms
•Lifecycle•Postback•ViewState•ControlState
ASP.NET MVC •Routes•Controllers•ViewData•ActionFilters
DEMO
Model View Controller
Semplificare il codice e minimizzare i tempi!
ASP.NET MVC
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
Alcune imprecisioni su ASP.NET MVC(non del sottoscritto)
• È per tutti
– No, al momento può essere presto ed è meno
“intuitivo” (rispetto alle WebForm)
• È un sostituto per le WebForms
• È il miglior modo per sviluppare applicazioni
Web su .NET
• Bisogna riscrivere tutte le applicazioni WebForm
in MVC
Model View Controller
Semplificare il codice e minimizzare i tempi!
Conclusioni
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!Conclusioni
• Non c‟è un vincitore
– Né lo cercavamo
• C‟è sicuramente qualcosa di nuovo
51
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
• Pro WebForms:
– Adatte allo sviluppo
RAD
– Designer integrato in
Visual Studio
– Molte librerie di
controlli di terze parti
– Ottime per prototipi o
applicazioni
dimostrative
• Contro WebForms:
– Logica di
presentazione
mescolata alla logica
di business
– Difficile da testare
– Pagine pesanti per la
gestione del Viewstate
MVC vs WebForms
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
• Pro MVC:
– Separation of Concerns
(SoC)
– Controllo completo del
codice HTML generato
– Facile da testare
– No Viewstate (alle
volte può essere uno
svantaggio)
– Favorisce
l'estendibilità e la
mantenibilità delle
applicazioni
• Contro MVC:
– No designer (è uno
svantaggio?)
– No controlli di terze
parti o visuali (ancora)
– Iniziale curva di
apprendimento per chi
è abituato alle
applicazioni event-
driven
– Scarsa
documentazione
(MonoRail)
– Scarsa integrazione
con Visual Studio
(MonoRail)
MVC vs WebForms
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
WebForm 4.0 (in ASP.NET 4.0)
• È possibile disattivare o controllare la
dimensione del viewstate
• È possibile utilizzare un modulo HTTP ad hoc per
eseguire la riscrittura URL
– è possibile utilizzare il Web più recente routing API
ASP.NET 3.5 SP1.
• È possibile controllare dettaglio l'ID di elementi,
inclusi gli elementi con ambiti
• L'integrazione di Framework di JavaScript
esterno è più semplice ed efficiente.
• API di gestione della cronologia in ASP.NET 3.5
SP1 più semplice
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
Testability
• Unit testing di un controller:
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
Link utili (MonoRail)
• Castle Project:
– http://www.castleproject.org
• Blog:
– http://hammett.castleproject.org
– http://ayende.com/Blog
– http://www.kenegozi.com/blog
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
Link utili (ASP.NET MVC)
• ASP.NET MVC:
– http://www.asp.net/mvc
• Blog:
– Phil Haack (http://haacked.com/)
– Scott Hanselman (http://www.hanselman.com/)
– Scott Guthrie (http://weblogs.asp.net/scottgu/)
– Simone Chiaretta (http://codeclimber.net.nz/)
– Keyvan Nayyeri (http://nayyeri.net/)
– Ugo Lattanzi (http://www.imperugo.tostring.it/)
– Jeffrey Palermo (http://jeffreypalermo.com/)
– …e tanti altri…
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
Libri (ASP.NET MVC)
• MVC in Action
– http://www.manning.com/palermo/
• Beginning ASP.NET MVC
– http://www.google.it/search?hl=it&source=hp&q=Begi
nning+ASP.NET+MVC&meta=&aq=f&oq=
• Professional ASP.NET MVC
– http://www.wrox.com/WileyCDA/WroxTitle/Professio
nal-ASP-NET-MVC-1-0.productCd-0470384611.html
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
Manuel Scapolan
blog: http://www.manuelscapolan.it/
email: info@manuelscapolan.it
web: http://www.manuelscapolan.it/
Skype: manuel.scapolan
Messenger manuel@live.it
Twitter: -
community: www.1nn0va.net
Model V
iew
Contr
oller
Sem
plifi
care
il codic
e e
min
imiz
zare
i t
em
pi!
Marco Parenzan
blog: http://blog.codeisvalue.com/
email: marco.parenzan@libero.it
web: http://www.codeisvalue.com/
Skype: marco.parenzan
Messenger marco.parenzan@live.it
Twitter: marco_parenzan
community: www.1nn0va.net
60
Model View Controller
Semplificare il codice e minimizzare i tempi!
Grazie
Q & A
Recommended