sábado, 8 de octubre de 2011

ASP.NET MVC (I) Introducción

Introducción
Hoy vamos a ver una introducción a lo que espero sea una larga serie de artículos sobre ASP.NET MVC.
Podéis saltar directamente a las partes 2 y 3
Aquellos que vengáis del mundo Java prácticamente veréis a MVC como un estándar del día a día. Pero en el mundo .Net, no es así.

El problema es que en .Net hemos sufrido de la obsesiva directriz de Microsoft en el sentido de OCULTAR la complejidad y la esencia de las cosas, encapsulándolo todo en nuevas metáforas supuestamente más sencillas. Eso ha funcionado muy bien, consiguiendo en el modelo ASP.NET Webforms una forma relativamente simple de construir aplicaciones Web. Pero no deja de ser una abstracción, una metáfora. Cuando intentamos bajar al nivel del código Javascript es cuando realmente vemos que la metáfora de los WebForms se cae con su propio peso y nos ha estado ocultando una realidad compleja, pero que en otras tecnologías como Java, se maneja de forma natural.

Desde hace ya algún tiempo, ASP.NET MVC se ha introducido como una forma de volver a las raíces, de resolver las dos principales problemáticas que existían en los desarrollos web:
  • No ocultar la naturaleza de la web mediante falsas metáforas, que realmente nos complicaban mucho más la vida, como el uso de ViewState, etc.
  • Los flujos de las aplicaciones no están integrados de forma natural en las estructuras y arquitecturas de los webforms. Los webforms están diseñados para ser sencillos de implementar desde el punto de vista de los WinForms (pantallas de escritorio). Pero no constituyen una forma natural de implementar y separar la visualización de los datos, de lo que es el negocio.
El modelo MVC ante todo se basa en la estructura del flujo de nuestra aplicación Web. Representa de forma natural una vista por pantalla (o tipo de pantalla), e implementa acciones que no son sino las acciones de nuestras pantallas.

¿Cómo funciona MVC?
El patrón que se usa en MVC de ASP.NET es el de Front Controller.
Al controlador le llegan peticiones, que pasan por un mecanismo de enrutamiento. El enrutador decide qué controlador debe dispararse, ese controlador es el que da paso a las acciones e interactúa con el modelo, dando como resultado una vista.

El enrutamiento se encuentra dentro del espacio de nombres System.Web.Routing. Se trata de un espacio de nombres independiente de ASP.NET MVC, por lo que las personas que utilicen ASP.NET clásico (el de webforms), pueden tener también acceso a ese espacio de nombres.

Enrutado
La esencia de MVC dentro de ASP.NET se encuentra en el enrutado. Para ello, en el archivo Global.asax se define una tabla de rutas, una colección de rutas (RouteTable). Esa tabla lleva una ordenación, y el comportamiento vendrá definido por dicho orden (debe de ponerse el comportamiento más restrictivo siempre antes). Además, este enrutado permite restricciones (por ejemplo, en función de una clase específica definida por nosotros, o bien a través de expresiones globales).

Definición de rutas
La definición de rutas se hace mediante patrones. El patrón más común es:
{Controlador}/{acción}{parámetro}
Esto hace que la forma más habitual de navegar en una aplicación MVC sea mediante url's del estilo:
http://misitioweb/controlador/accion/parametro

Para definir una ruta por código sería algo así como:
var route = new Route("{controller}/{action}/{param}",new MvcRouteHandler());
class Route: RouteBase{
     //definición de la ruta
     string Url
     RouteValueDictionary Defaults //valores por defecto
     RouteValueDictionary Constraints //permite definir restricciones
     RouteValueDictionary DataTokens //permite asignar metadatos donde guardar información adicional 
     IRouteHandler RouteHandler
}

Bueno, ya vale para una primera introducción.
Para saltar a la segunda parte de este post, clic aquí.

2 comentarios:

  1. Interezante pero megustaria que publicaran ejemplos mvc

    ResponderEliminar
    Respuestas
    1. Interesante comentario. Tomo nota. Hay ya un 2º post de MVC, y tengo en preparación un 3º. Existen ya multitud de ejemplos en la red, y en especial en el MSDN. Microsoft está haciendo una apuesta muy fuerte por este Framework.
      No veo cómo publicar por ejemplo un ejemplo completo de código hecho en MVC. Para eso, el mismo Visual Studio 2010 crea un ejemplo completo.
      Si te refieres a poner ejemplos de aplicaciones que encajan con este framework, podría decirte que "todas", aunque eso lo contesto más exactamente en el 3er post que espero poder terminar un dia de estos.
      Gracias por el comentario!

      Eliminar