SlideShare una empresa de Scribd logo
1 de 61
Descargar para leer sin conexión
Model View Controller
Semplificare il codice e minimizzare i tempi!

       Manuel Scapolan info@manuelscapolan.it
       Marco Parenzan marco.parenzan@libero.it
                  10 dicembre 2009
Semplificare il codice e minimizzare i tempi!
                                                                                  Agenda
                                                • Il “passato”: Web Forms
                                                • Il “presente”(?): Model
                                                • il “futuro”: MVC
           Model View Controller




                                                   – 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
Model View Controller
Semplificare il codice e minimizzare i tempi!

                      DEMO


           Una pagina ASP.NET Web Forms
Semplificare il codice e minimizzare i tempi!
                                                                          Vantaggi di WebForm
                                                • Web Form ASP.NET è stabile e maturo ed è
                                                  supportato da molti strumenti e controlli di
                                                  terze parti
           Model View Controller




                                                • 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
Semplificare il codice e minimizzare i tempi!
                                                                          Svantaggi di WebForm
                                                • Mancanza della Separation of Concerns
                                                • Non è possibile testare una pagina aspx
                                                • Statefulness difficile da controllare (a scapito
           Model View Controller




                                                  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
Semplificare il codice e minimizzare i tempi!
                                                                            Ritorno alle origini
                                                Il web è semplicemente:
                                                • GET
                                                   Riceve dati dal server. I parametri sono passati
           Model View Controller




                                                   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
Semplificare il codice e minimizzare i tempi!
                                                                                          Cos‟è MVC?
                                                • MODEL
                                                  – La rappresentazione (specifica per il dominio) dei dati
                                                    su cui l‟applicazione opera
           Model View Controller




                                                • 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
Semplificare il codice e minimizzare i tempi!
                                                                                         Cos‟è MVC?
                                                • Model–View–Controller (MVC) è un pattern
                                                  architetturale usato in ingegneria del software
                                                • Il pattern isola la business logic dalla
           Model View Controller




                                                  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
Semplificare il codice e minimizzare i tempi!
                                                                        Separation of Concerns
                                                • Questa strutturazione, basata sulla separazione
                                                  dei concetti, ha una validità comprovata da
                                                  tantissime applicazioni web già realizzate (non
           Model View Controller




                                                  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
Semplificare il codice e minimizzare i tempi!
                                                                            MVC vs WebForms
                                                MVC                           WebForms

                                                           Filter                              Page
           Model View Controller




                                                      Logica comune (log,                  Code-behind
                                                         security, ...)




                                                        Controller               Page                       Controls
                                                                            Codice di markup               code-behind
                                                      Prende le decisioni
                                                       ed usufruisce dei
                                                            servizi



                                                                                                           Controls
                                                           Filter                                        Codice di markup
                                                        Logica comune
                                                       (trace, log, error
                                                         handling, ...)




                                                            View            Fonte: Monorail presentation at WebDevelopersCommunity,
                                                        Presenta i dati     Febbraio 2009 (Ken Egozi)
Semplificare il codice e minimizzare i tempi!
                                                            Per chi sono i framework MVC?
                                                • A chi interessa REST
                                                   – Gli Url sono puliti
                                                • A chi interessa SEO
           Model View Controller




                                                   – 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
Semplificare il codice e minimizzare i tempi!
                                                                           REST è importante
                                                • Representational state transfer (REST) è un tipo
                                                  di architettura software per i sistemi di ipertesto
                                                  distribuiti come il World Wide Web
           Model View Controller




                                                • 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
Semplificare il codice e minimizzare i tempi!
                                                                                                        Url
                                                • Gli Url non puntano più ad una pagina fisica
                                                • Un Url è mappato su un controller
                                                   – C‟è maggiore flessibilità
           Model View Controller




                                                   – C‟è un routing engine basato sugli Url, con una route
                                                     table
Semplificare il codice e minimizzare i tempi!
                                                                              SEO è importante
                                                • Url più comprensibili e “significativi”
                                                   – http://www.host.com/Products/CatalogItem.aspx?id=6
                                                   – http://www.host.com/Products/Televisions/Catalog/6
           Model View Controller




                                                • I motodi di ricerca penalizzano url non statici
                                                  che non possono riprodurre
Semplificare il codice e minimizzare i tempi!
                                                                   HTML pulito è importante
                                                • Non c‟è più necessità di un ViewState o di un
                                                  ControlState
                                                • Risposta HTTP più compatta
           Model View Controller




                                                   – Migliore scalabilità
                                                   – Migliori performances
Semplificare il codice e minimizzare i tempi!
                                                            Convention over Configuration
                                                • Configuration
                                                   – Informazioni memorizzate in web.config
                                                • Convention
           Model View Controller




                                                   – Seguire le “regole”
                                                      • Nomi delle classi
                                                      • Nomi delle cartelle
                                                   – Alcune possono essere sovrascritte, altre no
Semplificare il codice e minimizzare i tempi!
                                                                          Struttura delle cartelle
                                                • I framework MVC enfatizzano il principio
                                                  “convenzione su configurazione”
                                                   – Ci sono delle locazioni standard per ogni tipo di file
           Model View Controller




                                                • 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
Semplificare il codice e minimizzare i tempi!
                                                                               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)
           Model View Controller




                                                     –   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!
Semplificare il codice e minimizzare i tempi!       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
           Model View Controller




                                                   – built-in support for „unobtrusive javascript‟
                                                   – built-in support per JSON
                                                   – built-in support per partial page rendering
Semplificare il codice e minimizzare i tempi!
                                                                     Per chi importa i pattern
                                                • Basta con “double-click here” e codice
                                                  organizzato in Event Hadlers
                                                • Approccio invece più object oriented
           Model View Controller




                                                   – 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
Semplificare il codice e minimizzare i tempi!
                                                                                                 Controller
                                                • È il centro del modello MVC
                                                • Ogni richiesta (HTTP) è gestita da un controller e
                                                  renderizzata da una View
           Model View Controller




                                                • 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
Semplificare il codice e minimizzare i tempi!
                                                        Consigli per una ControllerAction
                                                • Sono funzioni di coordinamento per la
                                                  presentazione
                                                   – Tutte le logiche dovrebbero stare in un‟altra classe
           Model View Controller




                                                • 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à”
Semplificare il codice e minimizzare i tempi!
                                                                       “No more file mapping”
                                                • In precedenza non aveva il controllo degli Url
                                                   – Filosofia della pubblicazione dei files (aspx, ashx, php,
                                                     jsp …)
           Model View Controller




                                                   – <path fisico>=Server.MapPath(<path logico>)
                                                   – = Path.Combine(<physical root>, <virtual path>)
                                                • Non molto RESTful
                                                • Per avere il controllo degli UrlUrl Rewriting
                                                   – Mappatura di un Url web “qualsiasi” su un path (cioè su
                                                     file)
Semplificare il codice e minimizzare i tempi!
                                                                          Controller Actions vs. Urls
                                                • Quale è la relazione tra Controller Actions e Url
                                                    –   /Product/Index
                                                         • Invoca l‟azione Index sul controller ProductController
                                                    –   /Product
           Model View Controller




                                                         • 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
Semplificare il codice e minimizzare i tempi!
                                                                              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.
           Model View Controller




                                                           • 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
Semplificare il codice e minimizzare i tempi!
                                                                                           MonoRail
                                                • MVC Framework:
                                                  – Open source, Apache licence
                                                  – Costruito sulla pipeline di ASP.NET:
           Model View Controller




                                                      •   Session
                                                      •   Http Modules
                                                      •   Authentication/Authorization
                                                      •   Caching
                                                      •   etc.
Model View Controller
Semplificare il codice e minimizzare i tempi!
                                            Come funziona
Model View Controller
Semplificare il codice e minimizzare i tempi!


                                      URL <-> Action
                                      Model View Controller
                                                              Convention over Configuration
Semplificare il codice e minimizzare i tempi!
                                                                Convention over Configuration
                                                                                                Model View Controller
                                                ./Views/product/view.vm
           Model View Controller




                                                Controller                       View Engine
                                                                     View


                                                Per default viene caricata la vista che ha lo
                                                stesso nome della action, ma posso
                                                specificare da codice quale vista caricare:
Semplificare il codice e minimizzare i tempi!
                                                                         MonoRail in action (1)
                                                • Mappare l'estensione .rails sul filtro aspnet_isapi
           Model View Controller




                                                                                                        34
Semplificare il codice e minimizzare i tempi!
                                                                      MonoRail in action (2)
                                                • Aggiungere sezione di configurazione nel Web.config
           Model View Controller
Semplificare il codice e minimizzare i tempi!
                                                                             MonoRail in action (3)
                                                • Aggiungere i riferimenti alle librerie:

                                                •   Castle.Core
           Model View Controller




                                                •   Castle.MonoRail.Framework
                                                •   Castle.MonoRail.Framework.Views.NVelocity
                                                •   NVelocity




                                                Dipendono dal view engine utilizzato
Model View Controller
Semplificare il codice e minimizzare i tempi!

                    DEMO


                   MonoRail
Model View Controller
Semplificare il codice e minimizzare i tempi!

                 ASP.NET MVC
Semplificare il codice e minimizzare i tempi!
                                                                                          ASP.NET MVC
                                                • È l‟implementazione di Microsoft del pattern
                                                  Model-View-Controller in un framework per il
                                                  Web in .NET
           Model View Controller




                                                   – 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 View Controller
Semplificare il codice e minimizzare i tempi!
                                            Come funziona
Model View Controller
Semplificare il codice e minimizzare i tempi!


                                      URL <-> Action
                                      Model View Controller
                                                              Convention over Configuration
Model View Controller
Semplificare il codice e minimizzare i tempi!


                                      URL <-> Action
                                      Model View Controller
                                                              Routing Engine
Semplificare il codice e minimizzare i tempi!
                                                                Convention over Configuration
                                                                                                Model View Controller
                                                ./Views/products/view.aspx
           Model View Controller




                                                Controller                       View Engine
                                                                     View


                                                Per default viene caricata la vista che ha lo
                                                stesso nome della action, ma posso
                                                specificare da codice quale vista caricare:
Semplificare il codice e minimizzare i tempi!
                                                                    ASP.NET MVC in action (1)
                                                • Mappare l'estensione .mvc sul filtro aspnet_isapi
                                                   – Solo se siamo in IIS 5.x/6.x
           Model View Controller




                                                                                                      44
Semplificare il codice e minimizzare i tempi!
                                                               ASP.NET MVC in action (2)
                                                • Web.config IIS 5.x/6.x
           Model View Controller




                                                • Web.config IIS 7.x
Semplificare il codice e minimizzare i tempi!
                                                                  ASP.NET MVC in action (3)
                                                • Aggiungere i riferimenti alle
                                                  librerie:
                                                • System.Web.Mvc
           Model View Controller




                                                • 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
                               ASP.NET MVC   •Routes
ASP.NET       •Lifecycle
                                             •Controllers
WebForms      •Postback
                                             •ViewData
              •ViewState
                                             •ActionFilters
              •ControlState

ASPX Pages                    •MasterPages
                              •Themes, Skins
                              •General Templating

ASP.NET        •HttpApplicatio •HttpRuntime  •Authentication
Runtime        n               •HttpUtility  •Membership
               •HttpContext    •IHttpHandler •Caching
               •HttpRequest    •IHttpModule
               •HttpResponse •Authorization

.NET Framework 3.5sp1         •Common-Language Runtime 2.0
                              •Base Class Library 3.5
Model View Controller
Semplificare il codice e minimizzare i tempi!

                    DEMO


                 ASP.NET MVC
Alcune imprecisioni su ASP.NET MVC
                                                                                   (non del sottoscritto)
Semplificare il codice e minimizzare i tempi!


                                                • È per tutti
                                                   – No, al momento può essere presto ed è meno
                                                     “intuitivo” (rispetto alle WebForm)
           Model View Controller




                                                • È 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
Semplificare il codice e minimizzare i tempi!
                                                                                  Conclusioni
                                                • Non c‟è un vincitore
                                                   – Né lo cercavamo
                                                • C‟è sicuramente qualcosa di nuovo
           Model View Controller




                                                                                           51
Semplificare il codice e minimizzare i tempi!
                                                                               MVC vs WebForms
                                                • Pro WebForms:                • Contro WebForms:
                                                  – Adatte allo sviluppo         – Logica di
                                                    RAD                            presentazione
           Model View Controller




                                                  – Designer integrato in          mescolata alla logica
                                                    Visual Studio                  di business
                                                  – Molte librerie di            – Difficile da testare
                                                    controlli di terze parti     – Pagine pesanti per la
                                                  – Ottime per prototipi o         gestione del Viewstate
                                                    applicazioni
                                                    dimostrative
Semplificare il codice e minimizzare i tempi!
                                                                             MVC vs WebForms
                                                • Pro MVC:                   • Contro MVC:
                                                  – Separation of Concerns     – No designer (è uno
                                                    (SoC)                        svantaggio?)
           Model View Controller




                                                  – Controllo completo del     – No controlli di terze
                                                    codice HTML generato         parti o visuali (ancora)
                                                  – Facile da testare          – Iniziale curva di
                                                  – No Viewstate (alle           apprendimento per chi
                                                    volte può essere uno         è abituato alle
                                                    svantaggio)                  applicazioni event-
                                                  – Favorisce                    driven
                                                    l'estendibilità e la       – Scarsa
                                                    mantenibilità delle          documentazione
                                                    applicazioni                 (MonoRail)
                                                                               – Scarsa integrazione
                                                                                 con Visual Studio
                                                                                 (MonoRail)
Semplificare il codice e minimizzare i tempi!
                                                             WebForm 4.0 (in ASP.NET 4.0)
                                                • È possibile disattivare o controllare la
                                                  dimensione del viewstate
                                                • È possibile utilizzare un modulo HTTP ad hoc per
           Model View Controller




                                                  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 View Controller
Semplificare il codice e minimizzare i tempi!


                                      • Unit testing di un controller:
                                                                         Testability
Semplificare il codice e minimizzare i tempi!
                                                                                    Link utili (MonoRail)


                                                • Castle Project:
           Model View Controller




                                                   –   http://www.castleproject.org


                                                • Blog:
                                                   –   http://hammett.castleproject.org
                                                   –   http://ayende.com/Blog
                                                   –   http://www.kenegozi.com/blog
Semplificare il codice e minimizzare i tempi!
                                                                          Link utili (ASP.NET MVC)


                                                • ASP.NET MVC:
           Model View Controller




                                                   –   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…
Semplificare il codice e minimizzare i tempi!
                                                                          Libri (ASP.NET MVC)
                                                • MVC in Action
                                                   – http://www.manning.com/palermo/
                                                • Beginning ASP.NET MVC
           Model View Controller




                                                   – 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
Semplificare il codice e minimizzare i tempi!
                                                                             Manuel Scapolan
                                                     blog: http://www.manuelscapolan.it/
                                                    email: info@manuelscapolan.it
                                                      web: http://www.manuelscapolan.it/
           Model View Controller




                                                    Skype: manuel.scapolan
                                                 Messenger manuel@live.it
                                                    Twitter: -
                                                community: www.1nn0va.net
Semplificare il codice e minimizzare i tempi!
                                                                               Marco Parenzan
                                                     blog: http://blog.codeisvalue.com/
                                                     email: marco.parenzan@libero.it
                                                      web: http://www.codeisvalue.com/
           Model View Controller




                                                    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

Más contenido relacionado

Similar a Model View Controller - Semplificare Il Codice E Minimizzare I Tempi

ASP.NET MVC: Andare oltre il 100% (Web@work)
ASP.NET MVC: Andare oltre il 100% (Web@work)ASP.NET MVC: Andare oltre il 100% (Web@work)
ASP.NET MVC: Andare oltre il 100% (Web@work)Giorgio Di Nardo
 
Cert03 70-486 developing asp.net mvc 4 web applications
Cert03   70-486 developing asp.net mvc 4 web applicationsCert03   70-486 developing asp.net mvc 4 web applications
Cert03 70-486 developing asp.net mvc 4 web applicationsDotNetCampus
 
Applicazioni web con Asp.Net MVC 6
Applicazioni web con Asp.Net MVC 6Applicazioni web con Asp.Net MVC 6
Applicazioni web con Asp.Net MVC 6Michele Aponte
 
Il pattern mvvm come strutturare al meglio il vostro progetto
Il pattern mvvm come strutturare al meglio il vostro progettoIl pattern mvvm come strutturare al meglio il vostro progetto
Il pattern mvvm come strutturare al meglio il vostro progettoMicrosoft Mobile Developer
 
Cosa c'è di nuovo in asp.net core 2 0
Cosa c'è di nuovo in asp.net core 2 0Cosa c'è di nuovo in asp.net core 2 0
Cosa c'è di nuovo in asp.net core 2 0Andrea Dottor
 
Blazor ha vinto? Storie di casi reali
Blazor ha vinto? Storie di casi realiBlazor ha vinto? Storie di casi reali
Blazor ha vinto? Storie di casi realiAndrea Dottor
 
IntroduzioneAllaGestioneDiUnProgettoSoftwareConUML
IntroduzioneAllaGestioneDiUnProgettoSoftwareConUMLIntroduzioneAllaGestioneDiUnProgettoSoftwareConUML
IntroduzioneAllaGestioneDiUnProgettoSoftwareConUMLmatteo_gentile
 
Niccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWTNiccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWTfirenze-gtug
 
Alessandro Forte - MVP vs MVC
Alessandro Forte - MVP vs MVCAlessandro Forte - MVP vs MVC
Alessandro Forte - MVP vs MVCAlessandro Forte
 
Alessandro Forte - ASP.Net 4.0
Alessandro Forte - ASP.Net 4.0Alessandro Forte - ASP.Net 4.0
Alessandro Forte - ASP.Net 4.0Alessandro Forte
 
Blazor: are we ready for the launch?
Blazor: are we ready for the launch?Blazor: are we ready for the launch?
Blazor: are we ready for the launch?Andrea Agnoletto
 
Zend Framework Workshop Parte1
Zend Framework Workshop Parte1Zend Framework Workshop Parte1
Zend Framework Workshop Parte1massimiliano.wosz
 
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
 
Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015Codemotion
 
Brokering over WCF @ dotNetMarche
Brokering over WCF @ dotNetMarcheBrokering over WCF @ dotNetMarche
Brokering over WCF @ dotNetMarcheMauro Servienti
 

Similar a Model View Controller - Semplificare Il Codice E Minimizzare I Tempi (20)

ASP.NET MVC: Andare oltre il 100% (Web@work)
ASP.NET MVC: Andare oltre il 100% (Web@work)ASP.NET MVC: Andare oltre il 100% (Web@work)
ASP.NET MVC: Andare oltre il 100% (Web@work)
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
 
Cert03 70-486 developing asp.net mvc 4 web applications
Cert03   70-486 developing asp.net mvc 4 web applicationsCert03   70-486 developing asp.net mvc 4 web applications
Cert03 70-486 developing asp.net mvc 4 web applications
 
ASP.NET MVC Intro
ASP.NET MVC IntroASP.NET MVC Intro
ASP.NET MVC Intro
 
Paradigma mvc
Paradigma mvcParadigma mvc
Paradigma mvc
 
Applicazioni web con Asp.Net MVC 6
Applicazioni web con Asp.Net MVC 6Applicazioni web con Asp.Net MVC 6
Applicazioni web con Asp.Net MVC 6
 
Il pattern mvvm come strutturare al meglio il vostro progetto
Il pattern mvvm come strutturare al meglio il vostro progettoIl pattern mvvm come strutturare al meglio il vostro progetto
Il pattern mvvm come strutturare al meglio il vostro progetto
 
Cosa c'è di nuovo in asp.net core 2 0
Cosa c'è di nuovo in asp.net core 2 0Cosa c'è di nuovo in asp.net core 2 0
Cosa c'è di nuovo in asp.net core 2 0
 
Blazor ha vinto? Storie di casi reali
Blazor ha vinto? Storie di casi realiBlazor ha vinto? Storie di casi reali
Blazor ha vinto? Storie di casi reali
 
IntroduzioneAllaGestioneDiUnProgettoSoftwareConUML
IntroduzioneAllaGestioneDiUnProgettoSoftwareConUMLIntroduzioneAllaGestioneDiUnProgettoSoftwareConUML
IntroduzioneAllaGestioneDiUnProgettoSoftwareConUML
 
Niccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWTNiccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWT
 
Alessandro Forte - MVP vs MVC
Alessandro Forte - MVP vs MVCAlessandro Forte - MVP vs MVC
Alessandro Forte - MVP vs MVC
 
Alessandro Forte - ASP.Net 4.0
Alessandro Forte - ASP.Net 4.0Alessandro Forte - ASP.Net 4.0
Alessandro Forte - ASP.Net 4.0
 
Presentazione Tesi
Presentazione TesiPresentazione Tesi
Presentazione Tesi
 
ASP.NET MVC: Full Throttle
ASP.NET MVC: Full ThrottleASP.NET MVC: Full Throttle
ASP.NET MVC: Full Throttle
 
Blazor: are we ready for the launch?
Blazor: are we ready for the launch?Blazor: are we ready for the launch?
Blazor: are we ready for the launch?
 
Zend Framework Workshop Parte1
Zend Framework Workshop Parte1Zend Framework Workshop Parte1
Zend Framework Workshop Parte1
 
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
 
Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015
 
Brokering over WCF @ dotNetMarche
Brokering over WCF @ dotNetMarcheBrokering over WCF @ dotNetMarche
Brokering over WCF @ dotNetMarche
 

Más de Marco Parenzan

Azure IoT Central per lo SCADA engineer
Azure IoT Central per lo SCADA engineerAzure IoT Central per lo SCADA engineer
Azure IoT Central per lo SCADA engineerMarco Parenzan
 
Static abstract members nelle interfacce di C# 11 e dintorni di .NET 7.pptx
Static abstract members nelle interfacce di C# 11 e dintorni di .NET 7.pptxStatic abstract members nelle interfacce di C# 11 e dintorni di .NET 7.pptx
Static abstract members nelle interfacce di C# 11 e dintorni di .NET 7.pptxMarco Parenzan
 
Azure Synapse Analytics for your IoT Solutions
Azure Synapse Analytics for your IoT SolutionsAzure Synapse Analytics for your IoT Solutions
Azure Synapse Analytics for your IoT SolutionsMarco Parenzan
 
Power BI Streaming Data Flow e Azure IoT Central
Power BI Streaming Data Flow e Azure IoT Central Power BI Streaming Data Flow e Azure IoT Central
Power BI Streaming Data Flow e Azure IoT Central Marco Parenzan
 
Power BI Streaming Data Flow e Azure IoT Central
Power BI Streaming Data Flow e Azure IoT CentralPower BI Streaming Data Flow e Azure IoT Central
Power BI Streaming Data Flow e Azure IoT CentralMarco Parenzan
 
Power BI Streaming Data Flow e Azure IoT Central
Power BI Streaming Data Flow e Azure IoT CentralPower BI Streaming Data Flow e Azure IoT Central
Power BI Streaming Data Flow e Azure IoT CentralMarco Parenzan
 
Developing Actors in Azure with .net
Developing Actors in Azure with .netDeveloping Actors in Azure with .net
Developing Actors in Azure with .netMarco Parenzan
 
Math with .NET for you and Azure
Math with .NET for you and AzureMath with .NET for you and Azure
Math with .NET for you and AzureMarco Parenzan
 
Power BI data flow and Azure IoT Central
Power BI data flow and Azure IoT CentralPower BI data flow and Azure IoT Central
Power BI data flow and Azure IoT CentralMarco Parenzan
 
.net for fun: write a Christmas videogame
.net for fun: write a Christmas videogame.net for fun: write a Christmas videogame
.net for fun: write a Christmas videogameMarco Parenzan
 
Building IoT infrastructure on edge with .net, Raspberry PI and ESP32 to conn...
Building IoT infrastructure on edge with .net, Raspberry PI and ESP32 to conn...Building IoT infrastructure on edge with .net, Raspberry PI and ESP32 to conn...
Building IoT infrastructure on edge with .net, Raspberry PI and ESP32 to conn...Marco Parenzan
 
Anomaly Detection with Azure and .NET
Anomaly Detection with Azure and .NETAnomaly Detection with Azure and .NET
Anomaly Detection with Azure and .NETMarco Parenzan
 
Deploy Microsoft Azure Data Solutions
Deploy Microsoft Azure Data SolutionsDeploy Microsoft Azure Data Solutions
Deploy Microsoft Azure Data SolutionsMarco Parenzan
 
Deep Dive Time Series Anomaly Detection in Azure with dotnet
Deep Dive Time Series Anomaly Detection in Azure with dotnetDeep Dive Time Series Anomaly Detection in Azure with dotnet
Deep Dive Time Series Anomaly Detection in Azure with dotnetMarco Parenzan
 
Anomaly Detection with Azure and .net
Anomaly Detection with Azure and .netAnomaly Detection with Azure and .net
Anomaly Detection with Azure and .netMarco Parenzan
 
Code Generation for Azure with .net
Code Generation for Azure with .netCode Generation for Azure with .net
Code Generation for Azure with .netMarco Parenzan
 
Running Kafka and Spark on Raspberry PI with Azure and some .net magic
Running Kafka and Spark on Raspberry PI with Azure and some .net magicRunning Kafka and Spark on Raspberry PI with Azure and some .net magic
Running Kafka and Spark on Raspberry PI with Azure and some .net magicMarco Parenzan
 
Time Series Anomaly Detection with Azure and .NETT
Time Series Anomaly Detection with Azure and .NETTTime Series Anomaly Detection with Azure and .NETT
Time Series Anomaly Detection with Azure and .NETTMarco Parenzan
 

Más de Marco Parenzan (20)

Azure IoT Central per lo SCADA engineer
Azure IoT Central per lo SCADA engineerAzure IoT Central per lo SCADA engineer
Azure IoT Central per lo SCADA engineer
 
Azure Hybrid @ Home
Azure Hybrid @ HomeAzure Hybrid @ Home
Azure Hybrid @ Home
 
Static abstract members nelle interfacce di C# 11 e dintorni di .NET 7.pptx
Static abstract members nelle interfacce di C# 11 e dintorni di .NET 7.pptxStatic abstract members nelle interfacce di C# 11 e dintorni di .NET 7.pptx
Static abstract members nelle interfacce di C# 11 e dintorni di .NET 7.pptx
 
Azure Synapse Analytics for your IoT Solutions
Azure Synapse Analytics for your IoT SolutionsAzure Synapse Analytics for your IoT Solutions
Azure Synapse Analytics for your IoT Solutions
 
Power BI Streaming Data Flow e Azure IoT Central
Power BI Streaming Data Flow e Azure IoT Central Power BI Streaming Data Flow e Azure IoT Central
Power BI Streaming Data Flow e Azure IoT Central
 
Power BI Streaming Data Flow e Azure IoT Central
Power BI Streaming Data Flow e Azure IoT CentralPower BI Streaming Data Flow e Azure IoT Central
Power BI Streaming Data Flow e Azure IoT Central
 
Power BI Streaming Data Flow e Azure IoT Central
Power BI Streaming Data Flow e Azure IoT CentralPower BI Streaming Data Flow e Azure IoT Central
Power BI Streaming Data Flow e Azure IoT Central
 
Developing Actors in Azure with .net
Developing Actors in Azure with .netDeveloping Actors in Azure with .net
Developing Actors in Azure with .net
 
Math with .NET for you and Azure
Math with .NET for you and AzureMath with .NET for you and Azure
Math with .NET for you and Azure
 
Power BI data flow and Azure IoT Central
Power BI data flow and Azure IoT CentralPower BI data flow and Azure IoT Central
Power BI data flow and Azure IoT Central
 
.net for fun: write a Christmas videogame
.net for fun: write a Christmas videogame.net for fun: write a Christmas videogame
.net for fun: write a Christmas videogame
 
Building IoT infrastructure on edge with .net, Raspberry PI and ESP32 to conn...
Building IoT infrastructure on edge with .net, Raspberry PI and ESP32 to conn...Building IoT infrastructure on edge with .net, Raspberry PI and ESP32 to conn...
Building IoT infrastructure on edge with .net, Raspberry PI and ESP32 to conn...
 
Anomaly Detection with Azure and .NET
Anomaly Detection with Azure and .NETAnomaly Detection with Azure and .NET
Anomaly Detection with Azure and .NET
 
Deploy Microsoft Azure Data Solutions
Deploy Microsoft Azure Data SolutionsDeploy Microsoft Azure Data Solutions
Deploy Microsoft Azure Data Solutions
 
Deep Dive Time Series Anomaly Detection in Azure with dotnet
Deep Dive Time Series Anomaly Detection in Azure with dotnetDeep Dive Time Series Anomaly Detection in Azure with dotnet
Deep Dive Time Series Anomaly Detection in Azure with dotnet
 
Azure IoT Central
Azure IoT CentralAzure IoT Central
Azure IoT Central
 
Anomaly Detection with Azure and .net
Anomaly Detection with Azure and .netAnomaly Detection with Azure and .net
Anomaly Detection with Azure and .net
 
Code Generation for Azure with .net
Code Generation for Azure with .netCode Generation for Azure with .net
Code Generation for Azure with .net
 
Running Kafka and Spark on Raspberry PI with Azure and some .net magic
Running Kafka and Spark on Raspberry PI with Azure and some .net magicRunning Kafka and Spark on Raspberry PI with Azure and some .net magic
Running Kafka and Spark on Raspberry PI with Azure and some .net magic
 
Time Series Anomaly Detection with Azure and .NETT
Time Series Anomaly Detection with Azure and .NETTTime Series Anomaly Detection with Azure and .NETT
Time Series Anomaly Detection with Azure and .NETT
 

Model View Controller - Semplificare Il Codice E Minimizzare I Tempi

  • 1. Model View Controller Semplificare il codice e minimizzare i tempi! Manuel Scapolan info@manuelscapolan.it Marco Parenzan marco.parenzan@libero.it 10 dicembre 2009
  • 2. Semplificare il codice e minimizzare i tempi! Agenda • Il “passato”: Web Forms • Il “presente”(?): Model • il “futuro”: MVC Model View Controller – Alcuni accenni tecnologici • Demo: MonoRail • Demo: ASP.NET MVC • Conclusioni – Q&A 2
  • 3. Model View Controller Semplificare il codice e minimizzare i tempi! Web Forms
  • 4. Model View Controller Semplificare il codice e minimizzare i tempi! DEMO Una pagina ASP.NET Web Forms
  • 5. Semplificare il codice e minimizzare i tempi! Vantaggi di WebForm • Web Form ASP.NET è stabile e maturo ed è supportato da molti strumenti e controlli di terze parti Model View Controller • 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
  • 6. Semplificare il codice e minimizzare i tempi! Svantaggi di WebForm • Mancanza della Separation of Concerns • Non è possibile testare una pagina aspx • Statefulness difficile da controllare (a scapito Model View Controller 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
  • 7. Model View Controller Semplificare il codice e minimizzare i tempi! Introduzione al MVC
  • 8. Semplificare il codice e minimizzare i tempi! Ritorno alle origini Il web è semplicemente: • GET Riceve dati dal server. I parametri sono passati Model View Controller 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
  • 9. Semplificare il codice e minimizzare i tempi! Cos‟è MVC? • MODEL – La rappresentazione (specifica per il dominio) dei dati su cui l‟applicazione opera Model View Controller • 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
  • 10. Semplificare il codice e minimizzare i tempi! Cos‟è MVC? • Model–View–Controller (MVC) è un pattern architetturale usato in ingegneria del software • Il pattern isola la business logic dalla Model View Controller 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
  • 11. Semplificare il codice e minimizzare i tempi! Separation of Concerns • Questa strutturazione, basata sulla separazione dei concetti, ha una validità comprovata da tantissime applicazioni web già realizzate (non Model View Controller 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
  • 12. Semplificare il codice e minimizzare i tempi! MVC vs WebForms MVC WebForms Filter Page Model View Controller Logica comune (log, Code-behind security, ...) Controller Page Controls Codice di markup code-behind Prende le decisioni ed usufruisce dei servizi Controls Filter Codice di markup Logica comune (trace, log, error handling, ...) View Fonte: Monorail presentation at WebDevelopersCommunity, Presenta i dati Febbraio 2009 (Ken Egozi)
  • 13. Semplificare il codice e minimizzare i tempi! Per chi sono i framework MVC? • A chi interessa REST – Gli Url sono puliti • A chi interessa SEO Model View Controller – 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
  • 14. Semplificare il codice e minimizzare i tempi! REST è importante • Representational state transfer (REST) è un tipo di architettura software per i sistemi di ipertesto distribuiti come il World Wide Web Model View Controller • 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
  • 15. Semplificare il codice e minimizzare i tempi! Url • Gli Url non puntano più ad una pagina fisica • Un Url è mappato su un controller – C‟è maggiore flessibilità Model View Controller – C‟è un routing engine basato sugli Url, con una route table
  • 16. Semplificare il codice e minimizzare i tempi! SEO è importante • Url più comprensibili e “significativi” – http://www.host.com/Products/CatalogItem.aspx?id=6 – http://www.host.com/Products/Televisions/Catalog/6 Model View Controller • I motodi di ricerca penalizzano url non statici che non possono riprodurre
  • 17. Semplificare il codice e minimizzare i tempi! HTML pulito è importante • Non c‟è più necessità di un ViewState o di un ControlState • Risposta HTTP più compatta Model View Controller – Migliore scalabilità – Migliori performances
  • 18. Semplificare il codice e minimizzare i tempi! Convention over Configuration • Configuration – Informazioni memorizzate in web.config • Convention Model View Controller – Seguire le “regole” • Nomi delle classi • Nomi delle cartelle – Alcune possono essere sovrascritte, altre no
  • 19. Semplificare il codice e minimizzare i tempi! Struttura delle cartelle • I framework MVC enfatizzano il principio “convenzione su configurazione” – Ci sono delle locazioni standard per ogni tipo di file Model View Controller • 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
  • 20. Semplificare il codice e minimizzare i tempi! 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) Model View Controller – 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!
  • 21. Semplificare il codice e minimizzare i tempi! 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 Model View Controller – built-in support for „unobtrusive javascript‟ – built-in support per JSON – built-in support per partial page rendering
  • 22. Semplificare il codice e minimizzare i tempi! Per chi importa i pattern • Basta con “double-click here” e codice organizzato in Event Hadlers • Approccio invece più object oriented Model View Controller – Si deriva da classi base – Override di metodi astratti o virtuali – Implementare le interfacce
  • 23. Model View Controller Semplificare il codice e minimizzare i tempi! Alcuni concetti
  • 24. Semplificare il codice e minimizzare i tempi! Controller • È il centro del modello MVC • Ogni richiesta (HTTP) è gestita da un controller e renderizzata da una View Model View Controller • 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
  • 25. Semplificare il codice e minimizzare i tempi! Consigli per una ControllerAction • Sono funzioni di coordinamento per la presentazione – Tutte le logiche dovrebbero stare in un‟altra classe Model View Controller • 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à”
  • 26. Semplificare il codice e minimizzare i tempi! “No more file mapping” • In precedenza non aveva il controllo degli Url – Filosofia della pubblicazione dei files (aspx, ashx, php, jsp …) Model View Controller – <path fisico>=Server.MapPath(<path logico>) – = Path.Combine(<physical root>, <virtual path>) • Non molto RESTful • Per avere il controllo degli UrlUrl Rewriting – Mappatura di un Url web “qualsiasi” su un path (cioè su file)
  • 27. Semplificare il codice e minimizzare i tempi! Controller Actions vs. Urls • Quale è la relazione tra Controller Actions e Url – /Product/Index • Invoca l‟azione Index sul controller ProductController – /Product Model View Controller • 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
  • 28. Semplificare il codice e minimizzare i tempi! 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. Model View Controller • 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
  • 29. Model View Controller Semplificare il codice e minimizzare i tempi! MonoRail
  • 30. Semplificare il codice e minimizzare i tempi! MonoRail • MVC Framework: – Open source, Apache licence – Costruito sulla pipeline di ASP.NET: Model View Controller • Session • Http Modules • Authentication/Authorization • Caching • etc.
  • 31. Model View Controller Semplificare il codice e minimizzare i tempi! Come funziona
  • 32. Model View Controller Semplificare il codice e minimizzare i tempi! URL <-> Action Model View Controller Convention over Configuration
  • 33. Semplificare il codice e minimizzare i tempi! Convention over Configuration Model View Controller ./Views/product/view.vm Model View Controller Controller View Engine View Per default viene caricata la vista che ha lo stesso nome della action, ma posso specificare da codice quale vista caricare:
  • 34. Semplificare il codice e minimizzare i tempi! MonoRail in action (1) • Mappare l'estensione .rails sul filtro aspnet_isapi Model View Controller 34
  • 35. Semplificare il codice e minimizzare i tempi! MonoRail in action (2) • Aggiungere sezione di configurazione nel Web.config Model View Controller
  • 36. Semplificare il codice e minimizzare i tempi! MonoRail in action (3) • Aggiungere i riferimenti alle librerie: • Castle.Core Model View Controller • Castle.MonoRail.Framework • Castle.MonoRail.Framework.Views.NVelocity • NVelocity Dipendono dal view engine utilizzato
  • 37. Model View Controller Semplificare il codice e minimizzare i tempi! DEMO MonoRail
  • 38. Model View Controller Semplificare il codice e minimizzare i tempi! ASP.NET MVC
  • 39. Semplificare il codice e minimizzare i tempi! ASP.NET MVC • È l‟implementazione di Microsoft del pattern Model-View-Controller in un framework per il Web in .NET Model View Controller – 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
  • 40. Model View Controller Semplificare il codice e minimizzare i tempi! Come funziona
  • 41. Model View Controller Semplificare il codice e minimizzare i tempi! URL <-> Action Model View Controller Convention over Configuration
  • 42. Model View Controller Semplificare il codice e minimizzare i tempi! URL <-> Action Model View Controller Routing Engine
  • 43. Semplificare il codice e minimizzare i tempi! Convention over Configuration Model View Controller ./Views/products/view.aspx Model View Controller Controller View Engine View Per default viene caricata la vista che ha lo stesso nome della action, ma posso specificare da codice quale vista caricare:
  • 44. Semplificare il codice e minimizzare i tempi! ASP.NET MVC in action (1) • Mappare l'estensione .mvc sul filtro aspnet_isapi – Solo se siamo in IIS 5.x/6.x Model View Controller 44
  • 45. Semplificare il codice e minimizzare i tempi! ASP.NET MVC in action (2) • Web.config IIS 5.x/6.x Model View Controller • Web.config IIS 7.x
  • 46. Semplificare il codice e minimizzare i tempi! ASP.NET MVC in action (3) • Aggiungere i riferimenti alle librerie: • System.Web.Mvc Model View Controller • 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)
  • 47. Lo stack ASP.NET aggiornato ASP.NET MVC •Routes ASP.NET •Lifecycle •Controllers WebForms •Postback •ViewData •ViewState •ActionFilters •ControlState ASPX Pages •MasterPages •Themes, Skins •General Templating ASP.NET •HttpApplicatio •HttpRuntime •Authentication Runtime n •HttpUtility •Membership •HttpContext •IHttpHandler •Caching •HttpRequest •IHttpModule •HttpResponse •Authorization .NET Framework 3.5sp1 •Common-Language Runtime 2.0 •Base Class Library 3.5
  • 48. Model View Controller Semplificare il codice e minimizzare i tempi! DEMO ASP.NET MVC
  • 49. Alcune imprecisioni su ASP.NET MVC (non del sottoscritto) Semplificare il codice e minimizzare i tempi! • È per tutti – No, al momento può essere presto ed è meno “intuitivo” (rispetto alle WebForm) Model View Controller • È un sostituto per le WebForms • È il miglior modo per sviluppare applicazioni Web su .NET • Bisogna riscrivere tutte le applicazioni WebForm in MVC
  • 50. Model View Controller Semplificare il codice e minimizzare i tempi! Conclusioni
  • 51. Semplificare il codice e minimizzare i tempi! Conclusioni • Non c‟è un vincitore – Né lo cercavamo • C‟è sicuramente qualcosa di nuovo Model View Controller 51
  • 52. Semplificare il codice e minimizzare i tempi! MVC vs WebForms • Pro WebForms: • Contro WebForms: – Adatte allo sviluppo – Logica di RAD presentazione Model View Controller – Designer integrato in mescolata alla logica Visual Studio di business – Molte librerie di – Difficile da testare controlli di terze parti – Pagine pesanti per la – Ottime per prototipi o gestione del Viewstate applicazioni dimostrative
  • 53. Semplificare il codice e minimizzare i tempi! MVC vs WebForms • Pro MVC: • Contro MVC: – Separation of Concerns – No designer (è uno (SoC) svantaggio?) Model View Controller – Controllo completo del – No controlli di terze codice HTML generato parti o visuali (ancora) – Facile da testare – Iniziale curva di – No Viewstate (alle apprendimento per chi volte può essere uno è abituato alle svantaggio) applicazioni event- – Favorisce driven l'estendibilità e la – Scarsa mantenibilità delle documentazione applicazioni (MonoRail) – Scarsa integrazione con Visual Studio (MonoRail)
  • 54. Semplificare il codice e minimizzare i tempi! WebForm 4.0 (in ASP.NET 4.0) • È possibile disattivare o controllare la dimensione del viewstate • È possibile utilizzare un modulo HTTP ad hoc per Model View Controller 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
  • 55. Model View Controller Semplificare il codice e minimizzare i tempi! • Unit testing di un controller: Testability
  • 56. Semplificare il codice e minimizzare i tempi! Link utili (MonoRail) • Castle Project: Model View Controller – http://www.castleproject.org • Blog: – http://hammett.castleproject.org – http://ayende.com/Blog – http://www.kenegozi.com/blog
  • 57. Semplificare il codice e minimizzare i tempi! Link utili (ASP.NET MVC) • ASP.NET MVC: Model View Controller – 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…
  • 58. Semplificare il codice e minimizzare i tempi! Libri (ASP.NET MVC) • MVC in Action – http://www.manning.com/palermo/ • Beginning ASP.NET MVC Model View Controller – 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
  • 59. Semplificare il codice e minimizzare i tempi! Manuel Scapolan blog: http://www.manuelscapolan.it/ email: info@manuelscapolan.it web: http://www.manuelscapolan.it/ Model View Controller Skype: manuel.scapolan Messenger manuel@live.it Twitter: - community: www.1nn0va.net
  • 60. Semplificare il codice e minimizzare i tempi! Marco Parenzan blog: http://blog.codeisvalue.com/ email: marco.parenzan@libero.it web: http://www.codeisvalue.com/ Model View Controller Skype: marco.parenzan Messenger marco.parenzan@live.it Twitter: marco_parenzan community: www.1nn0va.net 60
  • 61. Model View Controller Semplificare il codice e minimizzare i tempi! Grazie Q&A