El framework MVC
Introducción
El pattern MVC es una arquitectura reconocida desde hace muchos años por su solidez y modularidad. El principio de este pattern de diseño es muy claro: mejorar la separación del código para aumentar el mantenimiento y la comprobabilidad de cada pieza de la aplicación.
La primera versión de ASP.NET MVC apareció en 2009, ofreciendo el uso de este pattern en forma de un framework totalmente integrado con el framework .NET. A medida que .NET evolucionaba, el framework MVC también lo hacía, ofreciendo cada vez más funcionalidades para ayudar a los desarrolladores en su trabajo diario: paquete de archivos de cliente, modelo de validación, motor de renderizado Razor (que veremos más adelante en este capítulo), etc.
ASP.NET Core es una revisión completa del framework, al tiempo que conserva la esencia misma del pattern MVC: la separación de las capas de la aplicación para un mejor mantenimiento. Los desarrolladores que hayan trabajado con ASP.NET MVC 4 o 5 no se sentirán confundidos con ASP.NET Core y podrán orientarse fácilmente. La nueva versión añade incluso nuevas funciones, aún más interesantes y mucho mejor integradas con HTML5. El capítulo anterior ya cubrió un tercio del framework, es decir, la parte del Modelo, a través del Entity Framework. Este capítulo terminará...
Las vistas
Dentro del modelo MVC, la Vista es un concepto muy importante, ya que es la parte que encapsula las interacciones del usuario y le permite interactuar con el sistema web. Como todos los sitios web, la vista se compone de HTML, pero se puede enriquecer dinámicamente a través del servidor y, en particular, a través del motor Razor. El motor Razor puede ejecutar código del lado del servidor, generar HTML sobre la marcha en función de los datos recuperados y, a continuación, devolver el resultado. Las vistas son archivos en formato cshtml que se almacenan por defecto en la carpeta Views del proyecto. Esto es importante para la localización de las vistas: cuando un controlador solicita una vista, las rutas de búsqueda por defecto son:
-
Views/<NombreControlador>/<NombreVista>.cshtml
-
Views/Shared/<NombreVista>.cshtml
Le recomendamos que mantenga esta convención para mantener controladores sencillos, que devuelvan vistas siguiendo una nomenclatura clara y bien definida.
1. Sintaxis Razor, vistas dinámicas y fuertemente tipadas
Razor incluye una sintaxis para ejecutar código C# en una página web. Este código se ejecutará en el lado del servidor, generará HTML y luego el resultado completo se enviará de vuelta al navegador para su interpretación. La página devuelta debe contener sólo HTML, CSS o JavaScript.
El objetivo de esta sección no es proporcionar una visión completa de Razor, ya que no es nuevo para ASP.NET Core. El capítulo se ocupará de las nuevas características de Razor, en particular para ASP.NET Core, en las secciones dedicadas.
El símbolo clave de Razor es la @. Esta última permite pasar de HTML a C#. Razor evaluará cada bit de C# escrito en la página HTML y posteriormente, renderizará el resultado en forma de código HTML. Es fácil mezclar los dos para crear páginas HTML enriquecidas con muy poco código Razor. El símbolo @ es un símbolo reservado y, para escaparlo, necesita usar el símbolo doble @@.
Cuando los desarrolladores utilizan Razor, también pueden utilizar cualquier clase de C# en su archivo HTML. Incluso pueden utilizar APIs complejas, siempre que el espacio de nombres se importe correctamente. Por ejemplo, el código siguiente muestra la fecha de hoy:
<p>@DateTime.Now</p>...
Controladores
Los controladores son uno de los puntos esenciales del pattern MVC: validan los datos procedentes de la vista, realizan las acciones necesarias según la llamada realizada y devuelven información al cliente sobre el estado de la acción (éxito o error). El controlador se debe ver como un espacio de transición entre los datos y la vista. El controlador está ahí para llamar a los servicios adecuados, comprobar una serie de aspectos sobre los datos y, a continuación, gestionar la vista correspondiente a la acción a la que se llama.
Un controlador también se puede utilizar para definir un grupo de acciones. Este grupo de acciones se define a través de los métodos que declara la clase del controlador. Esto proporciona una agrupación lógica de las acciones que el sitio puede realizar. Es importante que la agrupación sea correcta porque definirá las URLs del sitio. Por convención, los controladores tienen las siguientes características:
-
Se encuentran en la carpeta Controllers, en la raíz del proyecto.
-
Heredan de Microsoft.AspNetCore.Controller.
Estas convenciones no son obligatorias. De hecho, en el contexto de una arquitectura compleja para un sistema empresarial avanzado, los controladores pueden estar dispersos en varios proyectos y agrupados en función de requisitos funcionales, más que de convenciones técnicas. Localizar las rutas del sitio web se basará en particular en el nombre del controlador (todas las clases terminadas en "Controlle") y por la herencia de la clase Controller.
En las secciones siguientes se describen algunas de las características interesantes de los controladores que los desarrolladores deben conocer.
1. El ciclo de vida
El ciclo de vida de un controlador es relativamente sencillo: cada solicitud HTTP instanciará un controlador y, en cuanto se devuelva la respuesta al cliente, se destruirá el controlador. El procesamiento de peticiones HTTP es un poco más complejo que eso, por lo que el siguiente diagrama resume la secuencia de módulos en el framework MVC:
Ciclo de vida del controlador
La solicitud HTTP se procesa del siguiente modo:
-
Dependiendo de las rutas definidas en la aplicación, la petición se redirige a un manejador que procesará la petición. El manejador utilizado...