Da pochi giorni Microsoft ha rilasciato la prima versione del nuovo framework ASP.NET MVC il cui scopo è quello di fornire un nuovo modo di sviluppare le applicazioni web da affiancare all'attuale modello basato su webform. Nell'articolo introduttivo basato sulla prima CTP sono presentate il perché di questo nuovo pattern e le idee che si possono riassumere brevemente:
- Suddivide quello che solitamente è lo strato di presentazione in tre parti: model, view e il controller; questo ne riduce la complessità di gestione e favorisce anche lo sviluppo da parte di team grandi;
- Permette di avere un controllo completo su tutto il markup che viene generato;
- Aumenta la superficie di codice testabile lasciando scoperto solo la view;
- E' integrato con tutta la normale pipeline ASP.NET già presente fino ad ora.
Creazione di un'applicazione MVC
L'installazione di ASP.NET MVC include un nuovo template per Visual Studio 2008 che mette a disposizione un nuovo progetto di nome ASP.NET MVC Web Application. Di fatto è una ASP.NET Web Application, perciò è una class library che va compilata per produrre un assembly da poi distribuire.
Il template include alcuni elementi di esempio, tra cui controller e relative view, una master page, un css, la libreria Microsoft ASP.NET AJAX più gli script jquery, ma ovviamente tutto questo può essere cancellato e gestito anche con un approccio misto alle attuali webform.
Nell'immagine seguente è possibile vedere una tipica struttura di applicazione MVC e la nuova tipologia di progetto che si ha a disposizione.
Per prima cosa nel web.config sono configurati l'assembly di nome System.Web.Mvc.dll, dove è inclusa tutta la libreria MVC, sono inoltre mappati i relativi namespace e il tutto è configurato con le impostazioni ASP.NET 3.5 SP1. Sono quindi inclusi anche i Dynamic Data e le funzionalità di routing attraverso il modulo UrlRoutingModule, componente fondamentale per il funzionamento di ASP.NET MVC e descritto in questo articolo.
Nel global.asax predefinito infatti è già definito del codice che registra il routing necessario per mappare una richiesta sul motore MVC:
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( // Route name "Default", // URL with parameters "{controller}/{action}/{id}", // Parameter defaults new { controller = "Home", action = "Index", id = "" } ); } protected void Application_Start() { RegisterRoutes(RouteTable.Routes); }
L'extension method MapRoute mappa sull'uri {controller}/{action}/{id} l'handler MvcRouteHandler il quale riceve per l'appunto il nome del controller e gli eventuali action e id. Infine, grazie ad un anonymous type vengono definiti i valori di default qualora si richiami la root del sito, mappando direttamente su http://miosito.it/Home/Index. L'applicazione è quindi contraddistinta dal fatto che ogni uri di richiesta presenta questi tre elementi per decidere il controller e la relativa action da chiamare dove è poi contenuta la logica di input.
Determinati questi tre parametri il motore istanzia la classe definita nella cartella Controllers avente il nome [controller]Controller. In essa va a richiamare poi il metodo di nome [action] dal quale si aspetta un risultato. Per esempio, per la pagina di Home/index la classe istanziata è HomeController e il metodo è Index, predefiniti già in questo modo:
public class HomeController : Controller { public ActionResult Index() { ViewData["Message"] = "Welcome to ASP.NET MVC!"; return View(); } }
Nel codice precedente si possono già notare alcuni elementi: il dictionary ViewData che permette di aggiungere informazioni da passare poi alla View e la chiamata al metodo View il quale restituisce un ActionResult come risultato della funzione. Quest'ultima sta ad indicare al motore di processare la view avente lo stesso nome dell'action che è contenuta nella cartella con il nome del controller. In questo caso quindi, nella cartella Views\Home è disponibile il file Index.aspx, il quale rappresenta la View che mostra le informazioni con l'eventuale model o si appoggia a quelle passate con ViewData. Questa pagina aspx è molto simile alle attuali webform, poiché viene processata e restituisce markup HTML, ad eccezione del fatto che eredita da ViewPage e non utilizza (o almeno non dovrebbe) la normale <form runat="server"> o i controlli la richiedono perché effettuano postback.
Ecco l'esempio predefinito:
<%@ Page Language="C#" MasterPageFile="Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %> <asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server"> <h2><%= Html.Encode(ViewData["Message"]) %></h2> To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>. </asp:Content>
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.