ASP.NET 5 & MVC 6 Release Candidate 1 José M. Aguilar • Microsoft MVP desde 2011 • Desarrollador & consultor independiente • Autor y tutor de cursos online de MVC (CampusMVP) • Autor de “SignalR programming in Microsoft ASP.NET” (Microsoft Press) • Contacto: • Blog: www.variablenotfound.com • Twitter: @jmaguilar ASP.NET 5 & MVC 6 RC1 Qué vamos a ver • Un poco de contexto • Lo nuevo de ASP.NET 5 • Lo nuevo de MVC 6 ASP.NET 5 & MVC 6 RC1 El Contexto De dónde venimos, a dónde vamos Un poco de historia… ¡Casi 15 años de ASP.NET! ASP.NET 5 & MVC 6 RC1 ASP.NET Web stack hoy Sites Web Forms Services Web Pages MVC Web API ASP.NET 4.x System.Web, aka “el monolito” .NET Framework 4.x Windows ASP.NET 5 & MVC 6 RC1 Signal R ¿Y si partimos de cero? • Modularidad Solo lo que usamos • Más productividad F5 en browser • Mejor aprovechamiento del servidor • Más rápido (muy rápido!) • Reducción de memoria (90%) • Cloud-ready by default • Configuración, sesión, cache, file system • Debugging/tracing/logging local&cloud • Más control sobre la evolución • Paquetes Nuget para features y framework • Sin breaking changes por actualizaciones • Actualizaciones rápidas (zero-day fixes) ASP.NET 5 & MVC 6 RC1 • Libertad de editores y herramientas: • Visual Studio, Sublime, Notepad, Code, Editores en cloud… • Command line • Integración con 3rd party tools (npm, bower, gulp…) • Cross-platform • Windows, Linux & Mac • En desarrollo y explotación Microsoft Mac & Linux • Open source con contribuciones Microsoft Open Source ASP.NET 5 Web stack Sites and services MVC Web Pages Realtime SignalR .NET Framework 4.x .NET Core Windows Cross-platform ASP.NET 5 & MVC 6 RC1 (Windows, Linux, Mac) ASP.NET 5 RC1 Principales novedades Novedades principales • Actual: RC1. Licencia “go-live” • RTM (prev) 1er trimestre 2016 • Estructura del proyecto: • • • • • Nuevos archivos y carpetas R.I.P. Web.config & Global.asax Project.json Clase Startup Referencias a paquetes Nuget ASP.NET 5 & MVC 6 RC1 • Pipeline y middlewares • Inyección de dependencias • Configuración • Y mucho más: logging, sesiones, cache, I18N, Kestrel/hosting, Antiforgery, file system, CORS, Webhooks, Identity, Node services, Web sockets, User secrets, command line tools… Demo: Estructura del proyecto ASP.NET 5 & MVC 6 RC1 Proceso de peticiones: pipeline y middlewares • Proceso de peticiones a través del pipeline de ASP.NET. • Pipeline = “tubería” Request Response ASP.NET 5 & MVC 6 RC1 • Ascienden las peticiones • Descienden las respuestas Pipeline y middlewares • Middleware = “filtro” Middleware Middleware Request Middleware Response ASP.NET 5 & MVC 6 RC1 • • • • • Observan peticiones y respuestas Pueden alterarlas Dejan pasar (o no) las peticiones Dejan pasar (o no) las respuestas ¡El orden importa! Demo: middleware “Hello world!” ASP.NET 5 & MVC 6 RC1 Pipeline y middlewares • Añadimos solo los middlewares que necesitamos • Aplicaciones reales varios middlewares • ASP.NET proporciona los más comunes Similar a lo que teníamos en ASP.NET <= 4.x: sesiones, seguridad, diagnóstico & control de errores, globalización… • Mecanismo extensible custom middlewares, comunidad ASP.NET 5 & MVC 6 RC1 Demo: middlewares ASP.NET 5 & MVC 6 RC1 ¿Dónde encajan los frameworks? My Application ASP.NET MVC framework Auth middleware Static Files middleware Error Handling middleware Request Response ASP.NET 5 & MVC 6 RC1 IIS Platform Handler Los frameworks también añaden middlewares al pipeline: app.UseMvc(); MVC 6 RC1 Principales novedades Novedades principales • Actual: RC1. Licencia “go-live” • RTM (prev) 1er trimestre 2016 • Construido sobre ASP.NET 5 (sin dependencias a System.Web) • Los principios siguen intactos • Casi todo lo que sabemos nos vale • Principalmente compatible a nivel de código • Algunas cosas que desaparecen: • • • • Framework Web API Child actions Web forms view engine Bundles frameworks de frontend • Características nuevas: • Derivadas de la nueva infraestructura: • Inyección de dependencias, configuration, application start, logging… • View components • Tag helpers • Y mucho más: • POCO controllers, IActionResult, convenciones, filtros asíncronos, flush parciales, vistas asíncronas, object results… ASP.NET 5 & MVC 6 RC1 Dependency injection en MVC • La “D” de los principios SOLID Desacoplar componentes • Por defecto se usa el dependency resolver de ASP.NET 5 • Puede usar contenedores externos (Ninject, Autofac, Unity, StructureMap…) • Uso: • Registramos dependencias en ConfigureServices() de Startup • Consumimos desde componentes instanciables por el framework: • • • • • Controladores Middlewares Filtros Vistas … ASP.NET 5 & MVC 6 RC1 Demo Dependency injection ASP.NET 5 & MVC 6 RC1 View components • Objetivo: facilitar la construcción de elementos de vista con lógica reutilizables • Escenarios de uso: widget de información del usuario, cesta de la compra, últimas noticias, actividad reciente, etc. • Sustituyen a los helpers Action() y RenderAction() y las child actions • Mini-controlador especializado, con una única acción que retorna contenido • Implementación: • La clase que hereda de ViewComponent (en lugar de Controller) • La vista que retorna (también puede ser JSON, un string…) • La invocación desde las vistas/layouts con @Component.Invoke /InvokeAsync ASP.NET 5 & MVC 6 RC1 Demo View component ASP.NET 5 & MVC 6 RC1 Tag helpers • Objetivo: vistas más sencillas de escribir y de leer • Pueden sustituir a los HTML helpers • Sintaxis declarativa: <a asp-action="about" asp-controller="home" asp-protocol="https"> Ir a About </a> • Procesado en servidor, antes de enviar el HTML al cliente • Permite: • Crear nuevas etiquetas • “Potenciar” etiquetas existentes • ASP.NET proporciona ~15 tag helpers ASP.NET 5 & MVC 6 RC1 Tag helpers: ejemplos HTML Helpers (MVC <=5) Tag Helpers (MVC >= 6) @Html.ActionLink("Enlace", "Index", "Home") <a asp-action="index" asp-controller=“home”> Enlace </a> @Html.ActionLink("Edit", "edit", "products", new { id=Model.Id }, new { id="mylink", @class="productlink", style="font-weight: bold" } ) <a asp-controller="products" asp-action="edit" asp-route-id="@Model.Id" id="mylink" class="productlink" style="font-weight: bold">Edit</a> @using (Html.BeginForm("Create", "Customer", FormMethod.Post, new { id = "logoutForm", @class = "navbar-right" })) { @Html.AntiForgeryToken() @Html.LabelFor(model => model.Name) @Html.TextBoxFor(model => model.Name) ... <!– Resto del formulario } <form asp-controller="Account" asp-action="LogOff" method="post" id="logoutForm" class="navbar-right"> ASP.NET 5 & MVC 6 RC1 <label asp-for="Name"></label> <input type="text" asp-for="Name"> ... <!– Formulario </form> ¡No son los <asp:tag runat=“server”> de Web Forms! Demo tag helpers • Algunos tag helpers básicos: • • • • • <a> <environment> <link> <script> <cache> • Tag helpers personalizados • Más ejemplos: https://github.com/dpaquette/TagHelperSamples ASP.NET 5 & MVC 6 RC1 Próximos pasos • Instalar: http://get.asp.net • Leer: https://docs.asp.net/ • Seguir de cerca: http://github.com/aspnet • Visitar mi blog http://www.variablenotfound.com ASP.NET 5 & MVC 6 RC1 ASP.NET 5 & MVC 6 RC1 That’s all, folks! ASP.NET 5 & MVC 6 RC1 http://wallpapercave.com/w/LCTg3vr
© Copyright 2024