ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7

Post on 08-Jan-2017

772 views 8 download

Transcript of ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7

#ReConnect2015

ASP.NET 5: MVC 6 y EF 7

#ReConnect2015 // @azuges @MsCodersMadrid @MadPoint @madriddotnet

Organizan:

#ReConnect2015

Luis Ruiz PavónSoftware DeveloperPlainConcepts

http://geeks.ms/blogs/lruizluisruizpavon

#ReConnect2015

Todo ha cambiado.Nada ha cambiado.

#ReConnect2015

Ecosistema .NET

#ReConnect2015

ASP.NET 5

#ReConnect2015

#ReConnect2015

ASP.NET 5: Nuevo paradigma• Pipeline limpio por defecto• Añadimos lo que necesitamos: Middleware

• Inyección de dependencias integrada en el framework• Personalizamos la configuración de los servicios

#ReConnect2015

Dot Net Version Manager – aka DNVM• ¿Qué es DNVM?

• Es una herramienta que nos va a permitir gestionar las diferentes versiones de los entornos de ejecución, versiones del Framework. Esta elección del entorno a ejecutar puede hacerse a nivel de proceso, usuario o maquina.• Se instala por defecto como un CMD o PS en %USERPROFILE%/.dnx de

usuario.

#ReConnect2015

Dot Net Execution Environment – aka DNX• ¿Qué es DNX?• El SDK y el runtime para desarrollar aplicaciones multiplataforma

en .NET.• Diferentes versiones• .NET Full Framework• .NET Core

• OSS• Runtime y librerías modulares• Administrado por NUGET• Linux y OSX

• Mono• Linux y OSX

#ReConnect2015

Dot Net Utilities – aka DNU• ¿Qué es DNU?• “Dot Net Environment Utilities”• Permite:• Administrar los paquetes de Nuget , instalar, restaurar etc• Empaquetar y publicar nuestra solución• Instalar y mantener comandos globales ( mas adelante lo veremos )• Listar dependencias• Y mucho mas… --help!

#ReConnect2015

Demo time

#ReConnect2015

Configuración• Sistema de configuración flexible• Sensible al concepto de entorno.• Archivos obligatorios y opcionales (.json, .ini, .xml)• Colecciones en memoria.• Argumentos de línea de comandos.• Variables de entorno.• User secret.

• Configurable como pipeline• Si la misma clave aparece en varios orígenes, la última gana.

#ReConnect2015

Configuración• Agrupar las configuraciones por grupos lógicos• Clase POCO que representa el grupo• Registrarla como servicio

// Configuration typed objectsservices.AddOptions();services.Configure<Settings>(Configuration.GetSection("Settings"));

Startup.cs

public class Settings{ public string ExternalApiBaseUrl { get; set; } public string SuperSecret { get; set; }}

Settings.cs{ "Settings": { "ExternalApiBaseUrl": "https://example.com", "SuperSecret": “No definirlo aquí!" }}

Appconfig.json

#ReConnect2015

https://www.humankode.com/security/how-a-bug-in-visual-studio-2015-exposed-my-source-code-on-github-and-cost-me-6500-in-a-few-hours

#ReConnect2015

Demo time

#ReConnect2015

Novedades en vistas• TagHelpers• Modifican el ouput• Custom TagHelpers• Sin output

• ViewComponentes• Reemplazan a las ChildActions (Html.Action)

• @inject y await en vistas razor

#ReConnect2015

TagHelpers

#ReConnect2015

Demo time

#ReConnect2015

Localización• Pasa del web.config a un middleware especializado• app.UseRequestLocalization();

• ¿De dónde?1. El query string (?culture=es-ES&ui-culture=es-ES)2. Una cookie (ASPNET_CULTURE)3. De la cabecera Accept-Language4. De la propiedad DefaultRequestCulture de la clase

RequestLocalizationOptions5. De la cultura del hilo actual

#ReConnect2015

Localización• A nivel de Framework (Microsoft.AspNet.Localization)• IStringLocalizer y IStringLocalizerFactory• services.AddLocalization();• La implementación por defecto usa .resx

• En MVC 6• IHtmlLocalizer y IViewLocalizer

services.AddMvc().AddViewLocalization(x => x.ResourcesPath = "").AddDataAnnotationsLocalization();

#ReConnect2015

Localización• IViewLocationExpander• Mecanismo para personalizar dónde se buscan las vistas

• LanguageViewLocationExpander• Añadido por defecto al configurar localización de vistas en MVC • Escenarios:

• Views/Controller/Action.[culture]• Views/Controller/[culture]/Action

#ReConnect2015

Demo time

#ReConnect2015

Archivos estáticos• Cambia la raiz de la aplicación• Carpeta wwwroot

• Archivos estáticos no se sirven por defecto!• app.UseStaticFiles();

#ReConnect2015

Ecosistema JavaScript

#ReConnect2015

Bower• Gestor de paquetes para librerías de cliente.• Gran aceptación en el mundo del desarrollo web• Gran cantidad de librerías actualizadas.

#ReConnect2015

Gulp• Reemplaza al Bundling de Mvc.• Automatización de tareas de desarrollo y despliegue• Análisis de código (linting) de javascript y css• Transformaciones de javascript, css o imágenes• Minimizado y concatenado de archivos• Automatización de ejecución de test• …

• Uso de herramientas multi-entorno y multi-plataforma• Mismas tareas con diferentes editores

#ReConnect2015

Integración con Visual Studio• Task Runner Explorer• Ejecución de tareas de gulp y grunt en VS• Bindings

• Dependencias de Bower y Npm• Explorador de soluciones• Restauración de paquetes al guarder (bower.json y package.json)

#ReConnect2015

Demo time

#ReConnect2015

Servidores• Helios (in-process en IIS, ahora deprecado)• WebListener (HTTP.SYS based, solo en Windows)• Kestrel (basado en libuv, multiplataforma)

https://github.com/aspnet/benchmarks

#ReConnect2015

Consideraciones para producciónKestrel a día de hoy se considera un servidor para desarrollo. Deberíamos tener en cuenta los siguientes consejos:• No expongas Kestrel directamente a internet, usa un servidor web que

delegue las peticiones a éste:• En Windows usa HttpPlatformHandler - UseIISPlatformHandler()• En Linux usar Nginx o Apache.

• Recuerda el principio de menor privilegio (don’t run as a root)• Tú aplicación corre como un proceso que debe ser lanzado, monitorizado y

debería continuar corriendo.

#ReConnect2015

Entity Framework 7• Se registra como servicio• Los DbContext disponibles para inyección de dependencias.

• Diferentes proveedores• InMemory

• Herramientas de línea de comandos• Migraciones y actualizaciones de base de datos

#ReConnect2015

Entity Framework 7• No disponible en la RC1

• Sproc mapping• Lazy loading• Complex/value types• Update model from database• Custom conventions• Non-relation providers

• Entonces, ¿Cuándo usar EF7?• Aplicaciones nuevas que no importen las limitaciones que hemos comentado antes y

donde no se requiere Full .NET• No migrar aplicaciones con EF6 a menos que se quieran usar las nueva caracterísiticas

de EF7.

#ReConnect2015

Demo time

Q&A?

#ReConnect2015

Thank you!#ReConnect2015