SlideShare una empresa de Scribd logo
1 de 51
una consultora tecnológica
que piensa en colores
para organizaciones vivas
una consultora tecnológica
que piensa en colores
para organizaciones vivas
ASP. NET vNext is Coming !!
Adrián Díaz Cervera
Adrián Díaz Cervera
ENCAMINA
Email : addiacer@gmail.com
Twitter : AdrianDiaz81
Blog
blogs.encamina.com/desarrollandos
osharepoint/
geeks.ms/blogs/adiazcervera
Es Microsoft Value Profesional de SharePoint Server
desde 2014. Miembro de varias comunidades
técnicas como SUGES, Office 365 y Valencia NET.
Lleva desarrollando con tecnologías Microsoft más
de 10 años y desde hace 5 años está centrado en el
desarrollo software. Actualmente trabaja en el
departamento de desarrollo de ENCAMINA una
consultora informática de Valencia que se destaca
por realizar soluciones basadas en Tecnología
Microsoft, principalmente en SharePoint,
SharePoint, Office 365 y Azure.
Valencia.NET
• Url: http://www.vlcdev.net/
• GitHub : https://github.com/ValenciaDEV
• Linkedin: https://www.linkedin.com/grp/home?gid=3918814
• Twitter: @VLCDev
• Proximos Eventos
– Octubre -> Helo Win10!!
– Noviembre -> IOT, RaspBerryPi 2 y mucho más ….
– Diciembre -> Desarrollo Movil Multiplataforma
Agenda
• Novedades
– Novedades en C#
– Roslyn
– ASP .NET vNext ¿Qué és?
• Cambios
• Front End (Grunt, Gulp, Node, NPM)
• Multiplataforma
• C# 6,0
• .NET Core
Novedades en C# 6.0
La evolución del lenguaje
• No hay grandes cambios como en otras versiones
• Algunas características pequeñas
• Clean Code
Principales cambios
Getter-only auto-properties
public class Point
{
public int X { get; set; }
public int Y { get; set; }
public Point(int x, int y) { X = x; Y = y; }
public double Dist
{
get { return Math.Sqrt(X * X + Y * Y); }
}
public override string ToString()
{
return String.Format("({0}, {1})", X, Y);
}
}
Getter-only auto-properties
public class Point
{
public int X { get; }
public int Y { get; }
public Point(int x, int y) { X = x; Y = y; }
public double Dist
{
get { return Math.Sqrt(X * X + Y * Y); }
}
public override string ToString()
{
return String.Format("({0}, {1})", X, Y);
}
}
Initializers for auto-properties
public class Point
{
public int X { get; } = 5;
public int Y { get; } = 7;
public Point(int x, int y) { X = x; Y = y; }
public double Dist
{
get { return Math.Sqrt(X * X + Y * Y); }
}
public override string ToString()
{
return String.Format("({0}, {1})", X, Y);
}
}
Using static classes
using System.Math;
public class Point
{
public int X { get; }
public int Y { get; }
public Point(int x, int y) { X = x; Y = y; }
public double Dist
{
get { return Math.Sqrt(X * X + Y * Y); }
}
public override string ToString()
{
return String.Format("({0}, {1})", X, Y);
}
}
Using static classes
Using static System.Math;
public class Point
{
public int X { get; }
public int Y { get; }
public Point(int x, int y) { X = x; Y = y; }
public double Dist
{
get { return Sqrt(X * X + Y * Y); }
}
public override string ToString()
{
return String.Format("({0}, {1})", X, Y);
}
}
String interpolation
using System.Math;
public class Point
{
public int X { get; }
public int Y { get; }
public Point(int x, int y) { X = x; Y = y; }
public double Dist
{
get { return Sqrt(X * X + Y * Y); }
}
public override string ToString()
{
return String.Format("({0}, {1})", X, Y);
}
}
String interpolation
using System.Math;
public class Point
{
public int X { get; }
public int Y { get; }
public Point(int x, int y) { X = x; Y = y; }
public double Dist
{
get { return Sqrt(X * X + Y * Y); }
}
public override string ToString()
{
return $"({X}, {Y})";
}
}
Expression-bodied methods
using System.Math;
public class Point
{
public int X { get; }
public int Y { get; }
public Point(int x, int y) { X = x; Y = y; }
public double Dist
{
get { return Sqrt(X * X + Y * Y); }
}
public override string ToString()
{
return $"({X}, {Y})";
}
}
Expression-bodied methods
using System.Math;
public class Point
{
public int X { get; }
public int Y { get; }
public Point(int x, int y) { X = x; Y = y; }
public double Dist
{
get { return Sqrt(X * X + Y * Y); }
}
public override string ToString()
{
return $"({X}, {Y})";
}
}
() => { return $"({X}, {Y})"; }
() => $"({X}, {Y})"
Expression-bodied methods
using System.Math;
public class Point
{
public int X { get; }
public int Y { get; }
public Point(int x, int y) { X = x; Y = y; }
public double Dist
{
get { return Sqrt(X * X + Y * Y); }
}
public override string ToString() => "({X}, {Y})";
}
Expression-bodied properties
using System.Math;
public class Point
{
public int X { get; }
public int Y { get; }
public Point(int x, int y) { X = x; Y = y; }
public double Dist
{
get { return Sqrt(X * X + Y * Y); }
}
public override string ToString() => "({X}, {Y})";
}
Expression-bodied properties
using System.Math;
public class Point
{
public int X { get; }
public int Y { get; }
public Point(int x, int y) { X = x; Y = y; }
public double Dist => Sqrt(X * X + Y * Y);
public override string ToString() => "({X}, {Y})";
}
Expression-bodied properties
using System.Math;
public class Point
{
public int X { get; }
public int Y { get; }
public Point(int x, int y) { X = x; Y = y; }
public double Dist => Sqrt(X * X + Y * Y);
public override string ToString() => "({X}, {Y})";
}
Index initializers
public class Point
{
public int X { get; }
public int Y { get; }
…
public JObject ToJson()
{
var result = new JObject();
result["x"] = X;
result["y"] = Y;
return result;
}
}
Index initializers
public class Point
{
public int X { get; }
public int Y { get; }
…
public JObject ToJson()
{
var result = new JObject() { ["x"] = X, ["y"] = Y };
return result;
}
}
Index initializers
public class Point
{
public int X { get; }
public int Y { get; }
…
public JObject ToJson()
{
return new JObject() { ["x"] = X, ["y"] = Y };
}
}
Index initializers
public class Point
{
public int X { get; }
public int Y { get; }
…
public JObject ToJson() =>
new JObject() { ["x"] = X, ["y"] = Y };
}
Null-conditional operators
public static Point FromJson(JObject json)
{
if (json != null &&
json["x"] != null &&
json["x"].Type == JTokenType.Integer &&
json["y"] != null &&
json["y"].Type == JTokenType.Integer)
{
return new Point((int)json["x"], (int)json["y"]);
}
return null;
}
Null-conditional operators
public static Point FromJson(JObject json)
{
if (json != null &&
json["x"]?.Type == JTokenType.Integer &&
json["y"]?.Type == JTokenType.Integer)
{
return new Point((int)json["x"], (int)json["y"]);
}
return null;
}
Null-conditional operators
public static Point FromJson(JObject json)
{
if (json != null &&
json["x"]?.Type == JTokenType.Integer &&
json["y"]?.Type == JTokenType.Integer)
{
return new Point((int)json["x"], (int)json["y"]);
}
return null;
}
?.
Null-conditional operators
public static Point FromJson(JObject json)
{
if (json != null &&
json["x"]?.Type == JTokenType.Integer &&
json["y"]?.Type == JTokenType.Integer)
{
return new Point((int)json["x"], (int)json["y"]);
}
return null;
}
Null-conditional operators
public static Point FromJson(JObject json)
{
if (json?["x"]?.Type == JTokenType.Integer &&
json?["y"]?.Type == JTokenType.Integer)
{
return new Point((int)json["x"], (int)json["y"]);
}
return null;
}
Null-conditional operators
{
var onChanged = OnChanged;
if (onChanged != null)
{
onChanged(this, args);
}
}
Null-conditional operators
OnChanged?.Invoke(this, args);
The nameof operator
public Point Add(Point point)
{
if (point == null)
{
throw new ArgumentNullException("point");
}
}
The nameof operator
public Point Add(Point other)
{
if (other == null)
{
throw new ArgumentNullException("point");
}
}
The nameof operator
public Point Add(Point point)
{
if (point == null)
{
throw new ArgumentNullException(nameof(point));
}
}
The nameof operator
public Point Add(Point other)
{
if (other == null)
{
throw new ArgumentNullException(nameof(other));
}
}
Exception filters
try
{
…
}
catch (ConfigurationException e) if (e.IsSevere)
{
}
finally
{
}
Await in catch and finally
try
{
…
}
catch (ConfigurationException e) if (e.IsSevere)
{
await LogAsync(e);
}
finally
{
await CloseAsync();
}
ROSLYN
• Compilador
de C# y Visual Basic
.NET
• APIs para analizar el
código y ayudar a
refactorizarlo
• Open Source
• Adaptar el código a
nosotros
• Multiplataforma
41
• Reescritura total de de ASP .NET
• Incompatible a nivel de código con versiones anteriores
• MVC y Web API se unifican en una sola API “ASP NET
MVC 6”
• WebForms queda Fuera
• Open Souce
• Entity Framework 7 se incluye “dentro” de ASP NET
ASP .NET vNext
42
• Un CLR optimo para “CLOUD”
Menos pasado
aplicaciones escalables
No vinculado a IIS
• Desplegable mediante Nuget
ASP .NET vNext
43
• Fichero propio de vNext
• Contiene:
– Las referencias Nuget
– Configuración
– Frameworks sobre los cuales
puede correr la aplicación
(.NET Fwk, K runtime, Mono,...)
Novedades: Project.json
44
• Web.Config ha muerto
• Nuevo framework de configuración con soporte para json,
command line, xml
• Configuración”hardcoded” en código...
– Bienvenido a un mundo gobernado por Roslyn
– Modifica el código... Y refresca el browser
Novedades: Configuración
45
Novedades: Configuración
46
• Clase ServiceCollection se agregan todas las dependencias
• ¿que pasa con nuestros viejos y conocidos contenedores de
dependencias, ya no son necesarios?
– crear nuestra propia implementacion de IServiceProvider
Novedades: Start Up -> Inyección de dependencias
47
• Sustituyen a PartialView
• Una clase que puede ser creada:
– Heredando de ViewComponent.
– Decorándola con el atributo [ViewComponent]
– Que nuestra clase termine con el sufijo ViewComponent.
• Una vista que será renderizada por el método Invoke de nuestro
ViewComponent.
Novedades: ViewComponents
48
• La nueva versión del ORM de MS se incluye dentro de
ASP.NET vNext
• Totalmente reescrito desde cero
• Incompatible con las versiones anteriores
• Basado en code first y migrations
Entity FrameWork 7.0
49
Novedades: Client Server
50
• es una librería JavaScript
• Configurar tareas automáticas
ahorrarnos tiempo en :
nuestro desarrollo
 despliegue de aplicaciones web
• Alguna de las tareas:
– preprocesar stylus y convertirlo a CSS,
– minificar el CSS
– Validar Javascript
– Minificar los ficheros JavaScript
• Igual que Nuget pero solo para la web
• NPM ?= Bower
– NPM para modulos
– Bower Librerias
• Evita conflicto de librerias
• Estándar web
Novedades: Client Server Bower
51

Más contenido relacionado

Similar a Asp vNext Is Comming (20)

Los lenguajes de la web
Los lenguajes de la webLos lenguajes de la web
Los lenguajes de la web
 
Lab7-POO
Lab7-POOLab7-POO
Lab7-POO
 
UNIDAD III - ACTIVIDAD VI
UNIDAD III - ACTIVIDAD VIUNIDAD III - ACTIVIDAD VI
UNIDAD III - ACTIVIDAD VI
 
Dart como alternativa a TypeScript (Codemotion 2016)
Dart como alternativa a TypeScript (Codemotion 2016)Dart como alternativa a TypeScript (Codemotion 2016)
Dart como alternativa a TypeScript (Codemotion 2016)
 
Ejercicios
EjerciciosEjercicios
Ejercicios
 
Tarea sesion 08_gottlieb
Tarea sesion 08_gottliebTarea sesion 08_gottlieb
Tarea sesion 08_gottlieb
 
Cicio 8 menu - switch
Cicio 8   menu - switchCicio 8   menu - switch
Cicio 8 menu - switch
 
Programa 9
Programa 9Programa 9
Programa 9
 
2 f programas
2 f programas2 f programas
2 f programas
 
2 f programas
2 f programas2 f programas
2 f programas
 
PARADIGMAS FP Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONA
PARADIGMAS FP  Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONAPARADIGMAS FP  Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONA
PARADIGMAS FP Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONA
 
Reporte unidad1
Reporte unidad1Reporte unidad1
Reporte unidad1
 
Ejemplos en diferentes lenguajes de programación
Ejemplos en diferentes lenguajes de programaciónEjemplos en diferentes lenguajes de programación
Ejemplos en diferentes lenguajes de programación
 
Poo 2009 u2_introd_a_la_poo_2
Poo 2009 u2_introd_a_la_poo_2Poo 2009 u2_introd_a_la_poo_2
Poo 2009 u2_introd_a_la_poo_2
 
P R A C T I C A2
P R A C T I C A2P R A C T I C A2
P R A C T I C A2
 
Metodo constructor de una clase JAVA
Metodo constructor de una clase JAVAMetodo constructor de una clase JAVA
Metodo constructor de una clase JAVA
 
Clase 21 programacion ejb 3.0
Clase 21 programacion ejb 3.0Clase 21 programacion ejb 3.0
Clase 21 programacion ejb 3.0
 
Laboratorio de algoritmos
Laboratorio de algoritmosLaboratorio de algoritmos
Laboratorio de algoritmos
 
Creacion de proyecto_en_netbeans
Creacion de proyecto_en_netbeansCreacion de proyecto_en_netbeans
Creacion de proyecto_en_netbeans
 
Vector
Vector Vector
Vector
 

Más de Adrian Diaz Cervera

Autenticar y securizar API en .NET Core como un Avenger
Autenticar y securizar API en .NET Core como un AvengerAutenticar y securizar API en .NET Core como un Avenger
Autenticar y securizar API en .NET Core como un AvengerAdrian Diaz Cervera
 
Como desarrollar una api en .NET Core como un autentico Avenger
Como desarrollar una api en .NET Core como un autentico AvengerComo desarrollar una api en .NET Core como un autentico Avenger
Como desarrollar una api en .NET Core como un autentico AvengerAdrian Diaz Cervera
 
React Hooks ¿Por donde empezar?
React Hooks ¿Por donde empezar?React Hooks ¿Por donde empezar?
React Hooks ¿Por donde empezar?Adrian Diaz Cervera
 
Netcore Galica Como crear Apps multitenant en Azure
Netcore Galica Como crear Apps multitenant en AzureNetcore Galica Como crear Apps multitenant en Azure
Netcore Galica Como crear Apps multitenant en AzureAdrian Diaz Cervera
 
Global Azure Devops Bootcamp 2019 => Avengers EndGame
Global Azure Devops Bootcamp 2019 => Avengers EndGameGlobal Azure Devops Bootcamp 2019 => Avengers EndGame
Global Azure Devops Bootcamp 2019 => Avengers EndGameAdrian Diaz Cervera
 
Azure Bootcamp Como montar una arquitectura Serverless y aprovechar Azure
Azure Bootcamp Como montar una arquitectura Serverless y aprovechar AzureAzure Bootcamp Como montar una arquitectura Serverless y aprovechar Azure
Azure Bootcamp Como montar una arquitectura Serverless y aprovechar AzureAdrian Diaz Cervera
 
Desarrolla Add-Ins de Office 365 con Angular 2
Desarrolla Add-Ins de Office 365 con Angular 2Desarrolla Add-Ins de Office 365 con Angular 2
Desarrolla Add-Ins de Office 365 con Angular 2Adrian Diaz Cervera
 
Docker para desarrolladores .NET
Docker para desarrolladores .NETDocker para desarrolladores .NET
Docker para desarrolladores .NETAdrian Diaz Cervera
 
Helo10 Da inteligencia a tus Apps con el proyecto Oxford
Helo10 Da inteligencia a tus Apps con el proyecto OxfordHelo10 Da inteligencia a tus Apps con el proyecto Oxford
Helo10 Da inteligencia a tus Apps con el proyecto OxfordAdrian Diaz Cervera
 
SharePoint Saturday Barcelona. La importancia de JavaScript en nuestros desar...
SharePoint Saturday Barcelona. La importancia de JavaScript en nuestros desar...SharePoint Saturday Barcelona. La importancia de JavaScript en nuestros desar...
SharePoint Saturday Barcelona. La importancia de JavaScript en nuestros desar...Adrian Diaz Cervera
 
Machine learning utilizacion en redes sociales
Machine learning utilizacion en redes socialesMachine learning utilizacion en redes sociales
Machine learning utilizacion en redes socialesAdrian Diaz Cervera
 
Adrian diaz desarrollo multiplataforma en office 365
Adrian diaz desarrollo multiplataforma en office 365Adrian diaz desarrollo multiplataforma en office 365
Adrian diaz desarrollo multiplataforma en office 365Adrian Diaz Cervera
 
Soluciones de movilidad para nuevos entornos empresariales
Soluciones de movilidad para nuevos entornos empresarialesSoluciones de movilidad para nuevos entornos empresariales
Soluciones de movilidad para nuevos entornos empresarialesAdrian Diaz Cervera
 
Java script para desarrolladores SharePoint
Java script para desarrolladores SharePointJava script para desarrolladores SharePoint
Java script para desarrolladores SharePointAdrian Diaz Cervera
 
IT Camps Apps Office 365 Valencia 2014
IT Camps Apps Office 365 Valencia 2014IT Camps Apps Office 365 Valencia 2014
IT Camps Apps Office 365 Valencia 2014Adrian Diaz Cervera
 

Más de Adrian Diaz Cervera (20)

gRPC vs Rest La batalla final
gRPC vs Rest La batalla finalgRPC vs Rest La batalla final
gRPC vs Rest La batalla final
 
Autenticar y securizar API en .NET Core como un Avenger
Autenticar y securizar API en .NET Core como un AvengerAutenticar y securizar API en .NET Core como un Avenger
Autenticar y securizar API en .NET Core como un Avenger
 
Como desarrollar una api en .NET Core como un autentico Avenger
Como desarrollar una api en .NET Core como un autentico AvengerComo desarrollar una api en .NET Core como un autentico Avenger
Como desarrollar una api en .NET Core como un autentico Avenger
 
React Hooks ¿Por donde empezar?
React Hooks ¿Por donde empezar?React Hooks ¿Por donde empezar?
React Hooks ¿Por donde empezar?
 
Netcore Galica Como crear Apps multitenant en Azure
Netcore Galica Como crear Apps multitenant en AzureNetcore Galica Como crear Apps multitenant en Azure
Netcore Galica Como crear Apps multitenant en Azure
 
Global Azure Devops Bootcamp 2019 => Avengers EndGame
Global Azure Devops Bootcamp 2019 => Avengers EndGameGlobal Azure Devops Bootcamp 2019 => Avengers EndGame
Global Azure Devops Bootcamp 2019 => Avengers EndGame
 
Azure Bootcamp Como montar una arquitectura Serverless y aprovechar Azure
Azure Bootcamp Como montar una arquitectura Serverless y aprovechar AzureAzure Bootcamp Como montar una arquitectura Serverless y aprovechar Azure
Azure Bootcamp Como montar una arquitectura Serverless y aprovechar Azure
 
Dockeriza tu SQL Server
Dockeriza tu SQL ServerDockeriza tu SQL Server
Dockeriza tu SQL Server
 
Desarrolla Add-Ins de Office 365 con Angular 2
Desarrolla Add-Ins de Office 365 con Angular 2Desarrolla Add-Ins de Office 365 con Angular 2
Desarrolla Add-Ins de Office 365 con Angular 2
 
Docker para desarrolladores .NET
Docker para desarrolladores .NETDocker para desarrolladores .NET
Docker para desarrolladores .NET
 
Helo10 Da inteligencia a tus Apps con el proyecto Oxford
Helo10 Da inteligencia a tus Apps con el proyecto OxfordHelo10 Da inteligencia a tus Apps con el proyecto Oxford
Helo10 Da inteligencia a tus Apps con el proyecto Oxford
 
SharePoint Saturday Barcelona. La importancia de JavaScript en nuestros desar...
SharePoint Saturday Barcelona. La importancia de JavaScript en nuestros desar...SharePoint Saturday Barcelona. La importancia de JavaScript en nuestros desar...
SharePoint Saturday Barcelona. La importancia de JavaScript en nuestros desar...
 
Gapand 2015 machine learning
Gapand 2015 machine learningGapand 2015 machine learning
Gapand 2015 machine learning
 
ALM y Office 365
ALM y Office 365 ALM y Office 365
ALM y Office 365
 
Machine learning utilizacion en redes sociales
Machine learning utilizacion en redes socialesMachine learning utilizacion en redes sociales
Machine learning utilizacion en redes sociales
 
Adrian diaz desarrollo multiplataforma en office 365
Adrian diaz desarrollo multiplataforma en office 365Adrian diaz desarrollo multiplataforma en office 365
Adrian diaz desarrollo multiplataforma en office 365
 
Extender office365
Extender office365 Extender office365
Extender office365
 
Soluciones de movilidad para nuevos entornos empresariales
Soluciones de movilidad para nuevos entornos empresarialesSoluciones de movilidad para nuevos entornos empresariales
Soluciones de movilidad para nuevos entornos empresariales
 
Java script para desarrolladores SharePoint
Java script para desarrolladores SharePointJava script para desarrolladores SharePoint
Java script para desarrolladores SharePoint
 
IT Camps Apps Office 365 Valencia 2014
IT Camps Apps Office 365 Valencia 2014IT Camps Apps Office 365 Valencia 2014
IT Camps Apps Office 365 Valencia 2014
 

Asp vNext Is Comming

  • 1. una consultora tecnológica que piensa en colores para organizaciones vivas una consultora tecnológica que piensa en colores para organizaciones vivas ASP. NET vNext is Coming !! Adrián Díaz Cervera
  • 2. Adrián Díaz Cervera ENCAMINA Email : addiacer@gmail.com Twitter : AdrianDiaz81 Blog blogs.encamina.com/desarrollandos osharepoint/ geeks.ms/blogs/adiazcervera Es Microsoft Value Profesional de SharePoint Server desde 2014. Miembro de varias comunidades técnicas como SUGES, Office 365 y Valencia NET. Lleva desarrollando con tecnologías Microsoft más de 10 años y desde hace 5 años está centrado en el desarrollo software. Actualmente trabaja en el departamento de desarrollo de ENCAMINA una consultora informática de Valencia que se destaca por realizar soluciones basadas en Tecnología Microsoft, principalmente en SharePoint, SharePoint, Office 365 y Azure.
  • 3. Valencia.NET • Url: http://www.vlcdev.net/ • GitHub : https://github.com/ValenciaDEV • Linkedin: https://www.linkedin.com/grp/home?gid=3918814 • Twitter: @VLCDev • Proximos Eventos – Octubre -> Helo Win10!! – Noviembre -> IOT, RaspBerryPi 2 y mucho más …. – Diciembre -> Desarrollo Movil Multiplataforma
  • 4. Agenda • Novedades – Novedades en C# – Roslyn – ASP .NET vNext ¿Qué és? • Cambios • Front End (Grunt, Gulp, Node, NPM) • Multiplataforma • C# 6,0 • .NET Core
  • 5.
  • 7. La evolución del lenguaje
  • 8. • No hay grandes cambios como en otras versiones • Algunas características pequeñas • Clean Code Principales cambios
  • 9. Getter-only auto-properties public class Point { public int X { get; set; } public int Y { get; set; } public Point(int x, int y) { X = x; Y = y; } public double Dist { get { return Math.Sqrt(X * X + Y * Y); } } public override string ToString() { return String.Format("({0}, {1})", X, Y); } }
  • 10. Getter-only auto-properties public class Point { public int X { get; } public int Y { get; } public Point(int x, int y) { X = x; Y = y; } public double Dist { get { return Math.Sqrt(X * X + Y * Y); } } public override string ToString() { return String.Format("({0}, {1})", X, Y); } }
  • 11. Initializers for auto-properties public class Point { public int X { get; } = 5; public int Y { get; } = 7; public Point(int x, int y) { X = x; Y = y; } public double Dist { get { return Math.Sqrt(X * X + Y * Y); } } public override string ToString() { return String.Format("({0}, {1})", X, Y); } }
  • 12. Using static classes using System.Math; public class Point { public int X { get; } public int Y { get; } public Point(int x, int y) { X = x; Y = y; } public double Dist { get { return Math.Sqrt(X * X + Y * Y); } } public override string ToString() { return String.Format("({0}, {1})", X, Y); } }
  • 13. Using static classes Using static System.Math; public class Point { public int X { get; } public int Y { get; } public Point(int x, int y) { X = x; Y = y; } public double Dist { get { return Sqrt(X * X + Y * Y); } } public override string ToString() { return String.Format("({0}, {1})", X, Y); } }
  • 14. String interpolation using System.Math; public class Point { public int X { get; } public int Y { get; } public Point(int x, int y) { X = x; Y = y; } public double Dist { get { return Sqrt(X * X + Y * Y); } } public override string ToString() { return String.Format("({0}, {1})", X, Y); } }
  • 15. String interpolation using System.Math; public class Point { public int X { get; } public int Y { get; } public Point(int x, int y) { X = x; Y = y; } public double Dist { get { return Sqrt(X * X + Y * Y); } } public override string ToString() { return $"({X}, {Y})"; } }
  • 16. Expression-bodied methods using System.Math; public class Point { public int X { get; } public int Y { get; } public Point(int x, int y) { X = x; Y = y; } public double Dist { get { return Sqrt(X * X + Y * Y); } } public override string ToString() { return $"({X}, {Y})"; } }
  • 17. Expression-bodied methods using System.Math; public class Point { public int X { get; } public int Y { get; } public Point(int x, int y) { X = x; Y = y; } public double Dist { get { return Sqrt(X * X + Y * Y); } } public override string ToString() { return $"({X}, {Y})"; } } () => { return $"({X}, {Y})"; } () => $"({X}, {Y})"
  • 18. Expression-bodied methods using System.Math; public class Point { public int X { get; } public int Y { get; } public Point(int x, int y) { X = x; Y = y; } public double Dist { get { return Sqrt(X * X + Y * Y); } } public override string ToString() => "({X}, {Y})"; }
  • 19. Expression-bodied properties using System.Math; public class Point { public int X { get; } public int Y { get; } public Point(int x, int y) { X = x; Y = y; } public double Dist { get { return Sqrt(X * X + Y * Y); } } public override string ToString() => "({X}, {Y})"; }
  • 20. Expression-bodied properties using System.Math; public class Point { public int X { get; } public int Y { get; } public Point(int x, int y) { X = x; Y = y; } public double Dist => Sqrt(X * X + Y * Y); public override string ToString() => "({X}, {Y})"; }
  • 21. Expression-bodied properties using System.Math; public class Point { public int X { get; } public int Y { get; } public Point(int x, int y) { X = x; Y = y; } public double Dist => Sqrt(X * X + Y * Y); public override string ToString() => "({X}, {Y})"; }
  • 22. Index initializers public class Point { public int X { get; } public int Y { get; } … public JObject ToJson() { var result = new JObject(); result["x"] = X; result["y"] = Y; return result; } }
  • 23. Index initializers public class Point { public int X { get; } public int Y { get; } … public JObject ToJson() { var result = new JObject() { ["x"] = X, ["y"] = Y }; return result; } }
  • 24. Index initializers public class Point { public int X { get; } public int Y { get; } … public JObject ToJson() { return new JObject() { ["x"] = X, ["y"] = Y }; } }
  • 25. Index initializers public class Point { public int X { get; } public int Y { get; } … public JObject ToJson() => new JObject() { ["x"] = X, ["y"] = Y }; }
  • 26. Null-conditional operators public static Point FromJson(JObject json) { if (json != null && json["x"] != null && json["x"].Type == JTokenType.Integer && json["y"] != null && json["y"].Type == JTokenType.Integer) { return new Point((int)json["x"], (int)json["y"]); } return null; }
  • 27. Null-conditional operators public static Point FromJson(JObject json) { if (json != null && json["x"]?.Type == JTokenType.Integer && json["y"]?.Type == JTokenType.Integer) { return new Point((int)json["x"], (int)json["y"]); } return null; }
  • 28. Null-conditional operators public static Point FromJson(JObject json) { if (json != null && json["x"]?.Type == JTokenType.Integer && json["y"]?.Type == JTokenType.Integer) { return new Point((int)json["x"], (int)json["y"]); } return null; } ?.
  • 29. Null-conditional operators public static Point FromJson(JObject json) { if (json != null && json["x"]?.Type == JTokenType.Integer && json["y"]?.Type == JTokenType.Integer) { return new Point((int)json["x"], (int)json["y"]); } return null; }
  • 30. Null-conditional operators public static Point FromJson(JObject json) { if (json?["x"]?.Type == JTokenType.Integer && json?["y"]?.Type == JTokenType.Integer) { return new Point((int)json["x"], (int)json["y"]); } return null; }
  • 31. Null-conditional operators { var onChanged = OnChanged; if (onChanged != null) { onChanged(this, args); } }
  • 33. The nameof operator public Point Add(Point point) { if (point == null) { throw new ArgumentNullException("point"); } }
  • 34. The nameof operator public Point Add(Point other) { if (other == null) { throw new ArgumentNullException("point"); } }
  • 35. The nameof operator public Point Add(Point point) { if (point == null) { throw new ArgumentNullException(nameof(point)); } }
  • 36. The nameof operator public Point Add(Point other) { if (other == null) { throw new ArgumentNullException(nameof(other)); } }
  • 38. Await in catch and finally try { … } catch (ConfigurationException e) if (e.IsSevere) { await LogAsync(e); } finally { await CloseAsync(); }
  • 39. ROSLYN • Compilador de C# y Visual Basic .NET • APIs para analizar el código y ayudar a refactorizarlo • Open Source • Adaptar el código a nosotros • Multiplataforma
  • 40.
  • 41. 41
  • 42. • Reescritura total de de ASP .NET • Incompatible a nivel de código con versiones anteriores • MVC y Web API se unifican en una sola API “ASP NET MVC 6” • WebForms queda Fuera • Open Souce • Entity Framework 7 se incluye “dentro” de ASP NET ASP .NET vNext 42
  • 43. • Un CLR optimo para “CLOUD” Menos pasado aplicaciones escalables No vinculado a IIS • Desplegable mediante Nuget ASP .NET vNext 43
  • 44. • Fichero propio de vNext • Contiene: – Las referencias Nuget – Configuración – Frameworks sobre los cuales puede correr la aplicación (.NET Fwk, K runtime, Mono,...) Novedades: Project.json 44
  • 45. • Web.Config ha muerto • Nuevo framework de configuración con soporte para json, command line, xml • Configuración”hardcoded” en código... – Bienvenido a un mundo gobernado por Roslyn – Modifica el código... Y refresca el browser Novedades: Configuración 45
  • 47. • Clase ServiceCollection se agregan todas las dependencias • ¿que pasa con nuestros viejos y conocidos contenedores de dependencias, ya no son necesarios? – crear nuestra propia implementacion de IServiceProvider Novedades: Start Up -> Inyección de dependencias 47
  • 48. • Sustituyen a PartialView • Una clase que puede ser creada: – Heredando de ViewComponent. – Decorándola con el atributo [ViewComponent] – Que nuestra clase termine con el sufijo ViewComponent. • Una vista que será renderizada por el método Invoke de nuestro ViewComponent. Novedades: ViewComponents 48
  • 49. • La nueva versión del ORM de MS se incluye dentro de ASP.NET vNext • Totalmente reescrito desde cero • Incompatible con las versiones anteriores • Basado en code first y migrations Entity FrameWork 7.0 49
  • 50. Novedades: Client Server 50 • es una librería JavaScript • Configurar tareas automáticas ahorrarnos tiempo en : nuestro desarrollo  despliegue de aplicaciones web • Alguna de las tareas: – preprocesar stylus y convertirlo a CSS, – minificar el CSS – Validar Javascript – Minificar los ficheros JavaScript
  • 51. • Igual que Nuget pero solo para la web • NPM ?= Bower – NPM para modulos – Bower Librerias • Evita conflicto de librerias • Estándar web Novedades: Client Server Bower 51

Notas del editor

  1. https://github.com/aspnet/Home/wiki/Roadmap