Parlando delle novità di Visual Studio 2010 con Pietro Bramabati, ci siamo soffermati su alcune considerazioni riguardo il framework ASP.NET MVC e l'integrazione del template all'interno dell'IDE.
D - Il template per Visual Studio 2010 per creare progetti ASP.NET MVC 2 consente di avere piene controllo sul markup generato?
R - Sì, il framework ASP.NET MVC ed il relativo template per Visual Studio 2010 consentono il pieno controllo da parte dello sviluppatore sul codice HTML generato, consentendogli quindi, di seguire gli standard per l’ HTML l’accessibilità, di creare siti che si integrano con l’uso di CSS e di sfruttare a pieno le moderne librerie JavaScript come JQuery; in particolare quest’ultima è già inclusa in uno dei template di Visual Studio 2010 per ASP.NET MVC 2 ed è supportata direttamente da Microsoft, nonché scaricabile direttamente dalle CDN Microsoft ad uso degli sviluppatori
D - Per i pochi che ancora hanno dei dubbi, puoi spiegare in breve parole quali sono le differenze più importanti tra ASP.NET MVC e le tradizionali Web Forms e quando scegliere di utilizzare l'una o l'altra tecnologia?
R - ASP.NET MVC consente un maggior controllo su HTML, maggior facilità di testing, ma al contempo utilizza una serie di servizi comuni ad ASP.NET: servizi di localizzazione, cache, le Membership API, le master-page ed il meccanismo di routing per generare URL SEO friendly.
Le Web Forms sfruttano comunque i servizi di ASP.NET ed aggiungono i concetti di postback e viewstate attraverso i quali sono sviluppati una serie di controlli
Ad esempio un controllo Calendar di ASP.NET Web Forms sfrutta le funzionalità di postback e viewstate per mantenere le informazioni tra una chiamata e l'altra aggiungendo una rappresentazione dello stato nel protocollo HTTP (che invece è stateless).
Grazie a questo meccanismo degli stati, le Web Forms hanno un ciclo di vita sul server che consente loro di produrre autonomamente il codice HTML della pagina. All'interno delle Web Forms possiamo utilizzare i controlli server side, che vengono eseguiti sul server e generano l'HTML aiutandoci a generare l'interazione con l'utente praticamente senza preoccuparci del markup.
Inoltre ci sono numerosi controlli già pronti sia disponibili nativamente nel framework .NET, sia di terze parti. Questo aspetto rende le Web Form più produttive, in ASP.NET MVC, infatti, non possiamo sfruttare questi controlli pre-confezionati.
Uno dei punti di forza di ASP.NET MVC è che l'HTML va scritto dal programmatore, che può utilizzare però anche controlli di terze parti come jQueryUI.
Questo aspetto, che può sembrare svantaggioso rispetto all meccanismo dei controlli server, fornisce il grande vantaggio di poter controllare ogni dettaglio del markup HTML: in questo modo si possono rispettare ad esempio tutte le norme dell'accessibilità.
In sintesi quindi, ASP.NET MVC offre maggior controllo sull’ HTML e facilità nel testing, mentre le Web Forms offrono un framework più produttivo ed un modello di sviluppo event-driven, cioè simile a quello usato per sviluppare applicazioni desktop.
D - Perché è più semplice realizzare lo unit testing con le applicazioni MVC?
R - Ogni singola funzionalità, classe e assembly di ASP.NET è stato pensato per essere facilmente testabile e anche il modello di programmazione che bisogna seguire per sviluppare con ASP.NET MVC lo è. Inoltre direi che è più facile anche "prendere confidenza" con lo unit testing, grazie ai tool di Visual Studio 2010 nelle versioni professional o superiori.
ASP.NET MVC è stato pensato per essere testabile, tanto che è possibile testare senza sever Web e database, possiamo simulare la presenza di cookies o il passaggo di un form in POST: una richiesta HTTP completa senza istanziare un server.
Possiamo comunque utilizzare qualsiasi framework per il testing o per il mocking delle nostre applicazioni.
Infine VS 2010 (dalla versione professional in su) integra uno strumento di test nell'IDE. Il template di progetto MVC permette di crare un progetto di test inizale che contempla già una ventina di casi di test che posso essere utilizzati per testare l'applicazione di base, ma anche per comprendere il funzionamento di alcuni scenari di unit testing.
Chi sta valutando o usa metodologie di sviluppo TDD troverà una naturale confidenza con il modello di sviluppo offerto da ASP.NET MVC, sia che usi gli strumenti di test offerti da Visual Studio 2010, sia che usi strumenti di test e mocking di terze parti. Per chi non ritiene adatto alle proprie esigenze questo modello di sviluppo, consiglio di sviluppare con le Web Forms.
D - Qual'è la novità più interessante di ASP.NET MVC 2?
La client side validation! La precedente versione supportava una valdazione solo server side: se, ad esempio, abbiamo un campo in una form e vogliamo verificare che non sia vuoto, dobbiamo effettuare un post sul server ed aspettare la validazione dall'application server.
La nuova versione, sfruttando alcuni file javascript e la keyword Html.EnableClientValidation (uno dei tanti nuovi Helper) ci permette di elaborare alcune regole di verifica direttamente sul browser. Inoltre il meccanismo di validazione client-side può sfruttare il meccanismo delle Data Annotation (sempre parte di ASP.NET), grazie al quale posso estendere tramite classi parziali le classi del nostro modello dati, aggiungendo regole del tipo: voglio che il campo Titolo sia obbligatorio ed in caso non sia presente segnalare un messaggio d’errore. Bene queste regole vengono naturalmente convertite in regole clien-side, tramite delle strutture json che vengono inserite nella pagina HTML e permettono quindi il funzionamento della validazione client-side, appunto. Il meccanismo di validazione di ASP.NET MVC è comunque estendibile e potete realizzare ed estendere questo meccanismo con diverse regole per la validazione client-side.
D - Se ho realizzato una applicazione con ASP.NET MVC 1 posso migrare alla nuova release?
R - Nella RTM di Visual Studio 2010 è stato inserito un wizard che permette di migrare progetti fatti con ASP.NET MVC 1 a progetti fatti con ASP.NET MVC 2. Il wizard vi consente di scegliere se aggiornare anche la versione del .NET Framework utilizzata e passare dalla 3.5 alla 4.0.