asp.net 5 & mvc 6 (rc1)
TRANSCRIPT
ASP.NET 5 & MVC 6Release Candidate 1
ASP.NET 5 & MVC 6 RC1
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
El ContextoDe dónde venimos, a dónde vamos
ASP.NET 5 & MVC 6 RC1
¡Casi 15 años de ASP.NET!
Un poco de historia…
ASP.NET 5 & MVC 6 RC1
ASP.NET Web stack hoySites
Web Forms Web Pages MVC
ServicesWeb API Signal R
ASP.NET 4.xSystem.Web, aka “el monolito”
.NET Framework 4.x
Windows
ASP.NET 5 & MVC 6 RC1
¿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)
• 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
• Open source con contribuciones Microsoft Open Source
Microsoft Mac & Linux
ASP.NET 5 & MVC 6 RC1
ASP.NET 5 Web stackSites and services
MVC Web Pages
RealtimeSignalR
.NET Framework 4.x
Windows
.NET Core
Cross-platform (Windows, Linux, Mac)
ASP.NET 5
ASP.NET 5 RC1Principales novedades
ASP.NET 5 & MVC 6 RC1
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
• 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…
ASP.NET 5 & MVC 6 RC1
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
• Ascienden las peticiones• Descienden las respuestas
ASP.NET 5 & MVC 6 RC1
Pipeline y middlewares•Middleware = “filtro”
• Observan peticiones y respuestas• Pueden alterarlas• Dejan pasar (o no) las peticiones• Dejan pasar (o no) las respuestas• ¡El orden importa!
Request
Response
Middleware
Middleware
Middleware
ASP.NET 5 & MVC 6 RC1
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
MyApplication
Error Handlingmiddleware
Authmiddleware
ASP.NET MVCframework
Static Filesmiddleware
Request
ResponseIIS Platform Handler
¿Dónde encajan los frameworks?
Los frameworks también añaden middlewares al pipeline: app.UseMvc();
MVC 6 RC1Principales novedades
ASP.NET 5 & MVC 6 RC1
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:
• Procesado en servidor, antes de enviar el HTML al cliente• Permite:
• Crear nuevas etiquetas• “Potenciar” etiquetas existentes
• ASP.NET proporciona ~15 tag helpers
<a asp-action="about" asp-controller="home" asp-protocol="https"> Ir a About</a>
ASP.NET 5 & MVC 6 RC1
Tag helpers: ejemplosHTML 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">
<label asp-for="Name"></label> <input type="text" asp-for="Name"> ... <!– Formulario
</form>
¡No son los <asp:tag runat=“server”>
de Web Forms!
ASP.NET 5 & MVC 6 RC1
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!
http://wallpapercave.com/w/LCTg3vr