ASP.NET MVC 4 Jorge Bustos j.bustos@danysoft.com, Servicios Profesionales sp@danysoft.com www.danysoft.com 18.04.2013 Contenido de la sesión Qué es ASP.NET MVC Comparación de MVC y WebForms 1
ASP.NET MVC Pero esto qué es? Qué es MVC Patrón arquitectónico Propicia la Separación de preocupaciones (Separation of concerns) Modelo: entidades + reglas de negocio Vista: lo que se mostrará en la IU Controlador: coordina comunicación con usuario, flujo de aplicación, y lógica de la aplicación 2
ASP.NET MVC Aplicación del patrón MVC a ASP.NET Modelo: incluye las capas de datos y lógica de negocio Vista: plantillas que generarán HTML Controlador: recibe entrada de usuario, usa lógica de negocio para decidir la vista que devuelve y la devuelve al usuario El 4º jugador: rutas Entrada del usuario, desde navegador: URL solicitada, que puede incluir parámetros Método (generalmente POST y GET) Adicionalmente puede haber: QueryString?provincia=28 valores de formulario (POST de formulario) JSON (petición AJAX, por ej. Con jquery) Enrutamiento: Elige controlador y acción Pasa parámetros (Model Binding) 3
Ejemplos de rutas Primer vistazo a MVC: Estructura de carpetas: Models, Views, Controllers Rutas: "{controller}/{action}/{id}" defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional} Ejemplos de rutas: p /Home/Index /Home/ / Controladores Clases que heredan de Controller Sus métodos son Acciones Al ejecutar un método se devuelve un ActionResult: ViewResult RedirectToActionResult JsonResult etc. El resultado se procesará y enviará al navegador 4
Vistas Son plantillas (.aspx o Razor) Reciben información del controlador para poderse generar Pueden generarse independientemente o dentro de un layout Razor Lenguaje de definición de plantillas No es nuevo (es C# o VB) Fácil de aprender Se edita con cualquier editor de texto Tiene soporte de Intellisense Compacto Soportan layouts (similar a páginas maestras) 5
Plantilla Razor Helpers para las plantillas Se usan en las plantillas (Razor o aspx) Son métodos de de extensión Pueden generar Tags de HTML @Html.TexBoxFor(m => m.nombre) Urls: @Url.Action( Ver, Producto, new { id = id }) Inyectar scripts unobstrusive para AJAX, etc. Soportan Intellisense (los hay tipados) 6
Flujo de ASP.NET MVC ASP.NET MVC La demo! 7
Filtros de MVC Filtros: Sencillos: son atributos Totalmente extensibles Autorización, filtrado de peticiones, selección de métodos, control de caché, validación casi cualquier cosa a lo largo del flujo ASP:NET MVC [HttpPost] [NoCache] // filtro personalizado public ActionResult Nuevo(Producto producto) Devolviendo cosas que no son páginas Los controladores devuelven ActionResult: ViewResult PartialViewResult FileResult ContentResult HttpStatusCodeResult (sin autorización, no encontrado ) JavaScriptResult JsonResult RedirectResult, RedirectToRouteResult Personalizados 8
ASP.NET MVC contra WebForms Lo que hace muy bien WebForms Arrastrar, soltar, clic! Diseñador visual con arrastrar + soltar + doble clic No hay que ver a penas el HTML Eventos con doble clic Simula eventos, que no existen en la web Mantenimiento automático de valores de controles (ViewState) En un medio sin estado Generación de HTML Inyección de scripts 9
ASP.NET Web Forms: La gran mentira Surgió para facilitar la vida a los programadores de aplicaciones Windows Oculta el modelo web sin estado (stateless) y sin eventos Consecuencias: Programación alejada del modelo Web Dificultad de soporte de AJAX, scripts de cliente, etc. Escaso control sobre el HTML generado Lo que complica WebForms: Pruebas unitarias, AJAX y Scripts de cliente Hacer pruebas unitarias: Gran dependencia del contexto (HttpContext) Las pruebas requieren el Web Host Hacer AJAX: Implementado con UpdatePanel Ciclo de vida entero de la página Postbacks de toda la página, incluido ViewState Imposibilidad de generar fragmentos de HTML Chapucear o usar Web Service ara devolver JSON Scripts de cliente: HTML e Ids fuera de nuestro control 10
Lo bueno de MVC: separación de preocupaciones (Separation of concerns) Separación de preocupaciones: p Model: lógica de negocio (y proyectos adicionales) View: pinta la IU Controller: flujo de aplicación, llamadas a lógica de negocio, devolución de datos para generar las vistas Los cross-concerns (requisitos transversales: autorización, logging, caché, etc.) se gestionan con filtros Más bueno de MVC: Convenciones (Convention over configuration) La ejecución de la aplicación usa los nombres de: Controladores ControladorController en carpeta Controllers Acciones (métodos de los controladores) Vistas en carpeta Views/Controlador/Accion Las convenciones están para ayudar pero Las convenciones están para ayudar, pero muchas se pueden saltar 11
Otra cosa buena de MVC: arquitectura muy fácil de probar Arquitectura muy fácil de probar: Capas muy bien separadas Fácil de hacer código desacoplado: soporta inyección de dependencias Posibilidad de emplear TDD Más cosas buenas de MVC Devuelve cualquier tipo de información aceptable para el navegador: Páginas completas, con o sin plantilla o parciales JSON (para AJAX) Redirecciones, Http Status Archivos, Contenido general Gran control sobre HTML y scripts de cliente: Incluido soporte jquery (Validation, unobstrusive) Extensibilidad (Helpers, Filtros, ViewEngines, factorías de controladores ) Validación, incluida por DataAnnotations 12
Viendo MVC con ojos de WebFormer Dónde están mis archivos.aspx? Ahora son rutas + controladores Esto se parece al ASP de los 90! Las plantillas sólo pintan la vista Y el IsPostback? MVC sólo sabe de GET y POST Y el ViewState? No existe, ni falta que hace! Se pueden mezclar? Claro, los dos funcionan sobre ASP.NET Pasándose a MVC Olvida (casi) todo lo que sabes de WebForms! 13
http://www.danysoft.com/visualstudio w.danysoft. www com 14