01 Mar

Le convenzioni definite nel framework ASP.NET MVC

Programming - ASP.NET MVC

Rieccoci a scrivere di ASP.NET MVC e del suo pattern Model-View-Controller. Vengono qui descritte le principali convenzioni da seguire durante lo sviluppo dell’applicazione web.

HomeController

Per convenzione l’HomeController è il punto di partenza dell’applicazione MVC. In un nuovo progetto Visual Studio crea una route di default seguendo questa convenzione. E’ sempre  possibile modificare a posteriori questa route di default nel file Global.asax.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace MvcApplication1
{
    // Note: For instructions on enabling IIS6 or IIS7 classic mode, 
    // visit http://go.microsoft.com/?LinkId=9394801

    public class MvcApplication : System.Web.HttpApplication
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                "Default",
                "{controller}/{action}/{id}",
                new { controller = "Home", action = "Index", id = "" }
            );

        }

        protected void Application_Start()
        {
            RegisterRoutes(RouteTable.Routes);
        }
    }
}

 Models

Per convenzione, i Models vengono sempre riposti nella cartella ~/Models.

Controllers

Per convenzione, i Controllers vengono riposti nella cartella ~/Controllers. Le classi Controller hanno i nomi terminanti in “Controller”. Si prenda ad esempio la classe HomeController. Quando si utilizzano gli HTML Helper methods di Razor, per convenzione si specifica il nome senza suffisso (nel caso sopre “Home”). Il framework MVC appenderà in automatico la desinenza “Controller” nella ricerca della classe.

Views

Per convenzione, Views  e Partial Views vengono riposte nella cartella ~/Views/[ControllerName].

 Naming convention per View e azioni

Le View sono associate alle azioni attraverso una convenzione nominale. Quindi, ad esempio, se l’azione di un Controller Home è definita come Index, il framework MVC associerà la View  a partire dal file ~/View/Home/Index.[ext]. Nel caso non dovesse trovare il file in questione, lo cercherà in seconda istanza nella cartella Shared, ovvero ~/View/Shared/Index.[ext]. Le estensioni permesse saranno quelle mappate su  IIS o Web.Config.

Quindi, per convenzione, le View  prendono il nome dell’azione e vengono create in una cartella col nome del Controller.

Naming convention per i Layout

Per convenzione ai file di Layout viene sempre anteposto il prefisso_“.  Ad esempio,  _Layout.

Layout di default

Se nella View non viene specificato un Layout tramite la direttiva di Razor @Layout, il framework MVC assume il file ~/Views/Shared/_Layout.cshtl come Layout di default. Questa convenzione di default  puo’ tuttavia essere modificata nel ~/Views/_ViewStart.cshtml cambiandone il nome del file mappato dalla direttiva Razor @Layout.

Contenuti statici e template grafici

I contenuti statici come immagini, file CSS e altri vengono sempre riposti nella cartella Content.

Default request root

Per convenzione una chiamata alla root del sito viene reindirizzata verso l’azione Index dell’HomeController. Ad esempio, se http://www.sviluppoeweb.it  fosse realizzato in ASP.NET MVC, la chiamata alla home del sito verrebbe veicolata dall’HomeController verso l’azione Index e rendendo la View  ~/Views/Home/Index.cshtml.

Cartelle di sistema

Esistono cartelle convenzionali in ASP.NET. Il framework ASP.NET MVC ne eredita alcune e ne implementa di nuove. In particolare:

  • ~/App_Data: questa cartella contiene fonti dati private alla web application (xml di configurazione, db, csv, ecc). I file contenuti in questa cartella sono protetti e non accessibili pubblicamente dal sito.
  • ~/App_Start: contiene i file di configurazione principali, come le Routes, i Filters e i Bundles
  • ~/bin: contiene gli assembly compilati
  • ~/Content: contiene i file statici e i template grafici
  • ~/Controllers: contiene i Controllers
  • ~/Models: contiene i Models
  • ~/Scripts: contiene le librerie Javascript
  • ~/Views: contiene le Views, le Partial Views e i Layout
  • ~/Views/Shared: contiene le Views, le Partial Views e i Layout condivisi
  • ~/Areas: contiene le Areas, una tecnica per suddividere l’applicazione in moduli distinti
  • ~/App_GlobalResources: contiene i resource files globali (per le Web Forms)
  • ~/App_LocalResources: contiene i resource files locali (per le Web Forms)

File di sistema

Come per le cartelle, esistono anche alcuni file di sistema:

  • ~/Views/Web.Config: questo file di configurazione previene che le views vengano servite  da IIS
  • ~/Global.asax: la classe globale delle applicazioni ASP.NET (eventi di inzializzazione, shutdown, gestione delle eccezioni a livello globale, ecc. )
  • ~/Web.Config: file di configurazione dell’applicazione