Estructura de un proyecto ASP.NET MVC

MVC (Model View Controller) es un patrón de arquitectura, descrito por primera vez por  Trygve Reenskaug en el año 1979, que tiene como objetivo separar nuestra aplicación en tres capas fundamentalmente:

  • Modelo: Es la encargada del manejo de los datos de nuestra aplicación (Persistencia).
  • Vista: La interfaz de usuario, la cual no contiene absolutamente nada de lógica de negocio. En MVC las vistas no contienen un archivo .cs/.vb enlazado como pasaba en WebForms.
  • Controlador: Es la capa que actúa como intermediaria entre la Vista y el Modelo.

Es importante conocer cuál es el rol de cada una de las capas para no introducir código donde no corresponde. Es decir, el Modelo es el dueño de los datos, el Controlador es un simple intermediario (Ni le importa cómo accede el modelo a sus datos, ni le importa como la vista muestra la información) y la Vista no debe saber nada de la existencia del Modelo. Cada uno va a tener sus propios problemas creo yo 🙂

Actualmente tenemos la versión 1.0 como release y la versión 2.0 Preview 2. Os facilito el enlace de ambas ya que podemos tener instaladas las dos plantillas en nuestra máquina a la vez. (También podemos instalar el framework de MVC usando Web Platform Installer).

ASP.NET MVC 1.0

ASP.NET MVC 2.0 Preview 2

Si creamos un proyecto con cualquiera de las dos plantillas, obtendríamos el siguiente resultado:

 

  • /Content: Esta carpeta está pensada para almacenar los recursos de nuestra aplicación, como imágenes, estilos (CSS), etcétera.
  • /Controllers: Almacena todos los controladores de nuestro proyecto.
  • /Models: Todas las clases relacionadas con nuestra capa de datos.
  • /Scripts: Contiene los scripts que se ejecutan del lado del cliente.
  • /Views: Todas las vistas de todos los controladores. Dentro de la misma hay una carpeta por controlador.
  • /App_Data: Podemos almacenar nuestros archivos de datos.

Entonces… si cada controlador tiene su vista y disponemos de varias para cada uno ¿En qué vista comienza mi aplicación? Tenemos un archivo Global.asax que nos ayudará a definirlo.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.Mvc;

using System.Web.Routing;

 

namespace MovieManagerTwo

{

    // 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",                                              // Route name

                "{controller}/{action}/{id}",                           // URL with parameters

                new { controller = "Home", action = "Index", id = "" }  // Parameter defaults

            );

 

        }

 

        protected void Application_Start()

        {

            RegisterRoutes(RouteTable.Routes);

        }

    }

}

Cuando la aplicación arranca, el método Application_Start() llama a su vez a RegisterRoutes. En él se puede apreciar que se crea una tabla de rutas y tenemos una ruta por defecto. En ella se indica el nombre del controlador, la acción que va a realizar y un parámetro id. En este caso vemos que el controlador que se ejecutará por defecto será HomeController y dentro del mismo se llamará a la acción Index. Tanto las acciones como la tabla de rutas lo veremos con más detenimiento. Por el momento es todo lo que necesitamos saber.

Si arrancamos la aplicación, podemos ver como efectivamente se ejecuta la acción Index del controlador Home.

Algunas de las ventajas que supone utilizar esta arquitectura pueden ser la siguientes:

  • El mantenimiento es más fácil debido a la división de responsabilidades.
  • No usa ViewState ni controles de servidor.
  • Es una arquitectura óptima para realizar pruebas unitarias (TDD).
  • Tenemos las herramientas necesarias para aplicar técnicas SEO.

Adjunto el Cheat Sheet dedicado al framework de MVC  que seguro que será de utilidad.

Para más información ASP.NET MVC.

 

¡Saludos!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *