En este post vamos a ver las novedades que nos trae Microsoft y los diferentes speakers en la conferencia anual .NET Conf.
Este resumen es un resumen rápido, en donde no vamos a tocar cada tema en profundidad porque sería un post interminable, hay que tener en cuenta que hemos tenido cerca de 40 horas de contenido.
Estuve siguiendo la conferencia en directo en mi twitter @NetmentorTw en este hilo.
Índice
Nota: Todas las imágenes que vas a ver en este post, están sacadas de dicha presentación.
1 - Novedades NET 6
Vamos a empezar igual que lo hizo la presentación, lo primero que vimos fue la Incursión de .NET 6
y de cómo el equipo de .NET ha creado librerías que permiten unificar el desarrollo para cualquier tipo de app.
Esto quiere decir que si queremos programar aplicaciones web, aplicaciones en la nube, de escritorio, Juegos, o aplicaciones en una raspberry PI, La gran mayoría del código será lo mismo, ya que a la hora de compilar es cuando .NET 6 se encarga de compilar para lo que necesita.
Un punto muy recurrente durante toda la conferencia ha sido el rendimiento y como ha mejorado con respecto a otras versiones. Mencionaron que .NET 6 es hasta un 92% más rápido que .NET 5.
Por supuesto invirtieron mucho tiempo en presentar C# 10 y sus novedades, que nosotros ya vimos en este post. Como por ejemplo, los global usings
, las mejoras en las lambdas, o las minimal API.
Pudimos ver también presentaciones de la nueva versión de F#, F#6
.
1.1 - Simplificar el desarrollo y las Minimal APIs
Hubo mucho contenido relacionado con las Minimal API, yo en su dia hice un post dando mi opinión y en ese post indiqué cuales eran mis miedos, y creo que estos miedos se han confirmado.
El objetivo de las minimal API, así como los programas de alto nivel, está claro al 100%, ya que se repitió constantemente durante la conferencia. Simplificar el lenguaje, haciendo las cosas más fáciles para atraer a nuevos desarrolladores que tienen ya experiencia en otros lenguajes como JavaScript.
En mi opinión el objetivo es atraer a todos esos desarrolladores que saben que usar nodeJS
o expressJS
no es la mejor opción para el backend, pero .NET era mucho más complejo y no querían dar el paso.
Lo cual está muy bien, el problema es que, como me temía, el código va a ser un caos, y así lo vimos durante la presentación:
Esta imagen es solo un fragmento de lo que era un único fichero con 30 endpoints, que a la que uno se complica un poco acabas con 2000 líneas de código en un único fichero.
Obviamente hay formas de limpiar esto, y técnicas que implementar que hacen “minimal APIS limpias”, pero desafortunadamente no vimos ninguna de ellas.
2 - Visual studio 2022
Otra de las novedades fue la nueva versión de visual studio, si bien es cierto que no hubo conferencia como tal (fue el día anterior) se mostraron novedades y cómo funcionan las cosas por detrás.
Se hizo mucho, pero mucho hincapié en hot reload, lo cual me dejó flipando porque como sabeis del vídeo que hice en youtube se planearon quitarlo. Pero bueno me alegro de que al final lo incluyeran de forma gratuita para todos.
En los vídeos que he creado últimamente ya uso VS22 así que lo tengo testeado, uno de los cambios principales es la interfaz, a mi, personalmente me gusta.
Además de eso, indicaron soporte para blazor, MAUI o incluso webforms en el propio visual studio
Luego mejoras de las habituales, Click and deploy
, integración con azure, con GitHub Actions o el autocompletado de código.
Quiero hacer un inciso para el completado de código y es que el equipo de Roslyn
dió una presentación de como funciona por detrás y que utiliza machine learning
.
Por cierto, .NET 6 únicamente funciona en Visual Studio 2022, no en versiones anteriores
3 - Azure
Si bien es cierto que no se hicieron nada específico de azure, si que iban metiendo miguitas en cada presentación, por ejemplo vimos mejoras en cosmosDB
dentro de la presentación de Entity framework
, Vimos cositas de azure container apps
cuando hablaron de K8s.
De lo que sí tuvimos una presentación fue de Azure functions y su roadmap.
Mencionaron que muchos programas /características de .NET funcionan mejor en Azure que en el resto de plataformas. Lo que personalmente no me parece bien, entiendo el motivo económico, pero es dar una patada en el culo a todos aquellos que no utilizamos Azure.
4 - Entity framework Core 6
Tuvimos muchas menciones a la mejora de rendimiento en general del lenguaje, pero donde sí ha mejorado de verdad, es en Entity Framework
. Vimos una presentación donde se hacía especial foco en ello, incluso llegando a decir que dapper en ciertos aspectos es únicamente un 2% superior a Entity framework core
.
Sea cierto o no, la diferencia es notable:
Otros aspectos que se mencionaron en sta presentación fue que han ampliado el número de data attributes que se pueden poner a los tipos, por ejemplo ahora puedes indicar
El atributo “Precision” y cuando operas en la base de datos indica automáticamente la precisión.
public class Product
{
[Precision(18,2)]
public decimal Price { get; set; }
public string Name { get; set; }
public Product(string name, decimal price)
{
Name = name;
Price = price;
}
}
O cuando tienes que hacer un mapping de un tipo, lo puedes hacer de una sola tacada con convenciones por defecto en la configuración del dbcontext
configurationBuilder.Properties<String>().HaveMaxLenght(200);
5 - Mejoras de Blazor en .NET 6
Personalmente me alegra estar escribiendo este punto, ya que eso quiere decir que microsoft no solo no ha matado blazor sino que está invirtiendo más y más recursos. Lo que indirectamente hace que muchas más empresas lo adopten para sus proyectos front end.
Varias mejoras para blazor. Como hasta ahora, la mejora principal es en rendimiento, concretamente en AOT
(ahead-of-time compilation). Mostrando una aplicación que dibujaba satélites dando vueltas en una pantalla, en una app de blazor normal era capaz de cargar 12800 satélites que daban vueltas (a 60fps) mientras que en AOT era capaz de dibujar 58200
Por supuesto esto viene a un costo, que es el tamaño de la aplicación, porque lo que AOT hace es compilar en código nativo antes de ser desplegado por lo que el navegador del cliente no tiene que interpretar nada, sino que corre de forma nativa.
Pusieron una comparación de tamaño y explicaron que como para todo AOT es una solución, lo que no quiere decir que sea la correcta, en ese caso sí, pero en una app empresarial pues no tiene mucho sentido.
Por cierto, como puedes observar en la imagen blazor Web Assembly tiene menor tamaño que en las versiones anteriores de .NET, de hecho, pudimos ver que el service worker como tal es únicamente 353kb, impresionante.
Vimos también aplicaciones híbridas que permiten ejecutar código escrito en blazor a través de MAUI.
Esta funcionalidad ya se presentó durante el año pasado, pero se ha vuelto a hacer referencia ya que es definitivamente muy potente.
Para acabar esta sección, mencionar que el equipo de Microsoft ha creado componentes para blazor con el estilo fluent-ui
que es el que utiliza Windows.
6 - MAUI
Desgraciadamente MAUI no va a salir oficialmente en .NET 6, sino que lo hará en el primer trimestre de 2022;
Lo que sí que pudimos ver eran demos y presentaciones funcionando completamente bien, pero no había datos de rendimiento. Debido a esto yo asumo que de cara al desarrollador todo está perfecto, lo que les toca es mejorar el código que va por detrás.
Esta es una de esas funcionalidades que no te puedes creer que funcionan hasta que las ves funcionando, porque si, un solo código para tener aplicaciones ios, android, de escritorio y macOS, A esto sumarle que si nuestra web está escrita en blazor, podemos tener también la parte web con el mismo código.
7 - ASP.NET Core MVC
Microsoft no se olvida de todos los desarrolladores que trabajan con ASP.NET Core Mvc
y nos trae mejoras, también, por supuesto, en el rendimiento.
Además del rendimiento, trae funcionalidades como: Css Isolation
que ya teníamos disponible en Blazor
, Async Screaming
o incluso mejorar la interacción con OpenAPI
.
8 - Machine learning en .NET 6
Sobre machine learning y ML.NET
no iba a comentar nada, ya que personalmente no estoy muy al día del tema, y para hablar sin saber prefiero no hablar, pero @Jonas_1ara, me comentó los Highlights en este hilo (muchas gracias :D) que yo os expongo aqui:
El beneficio principal de ML.NET
es añadir una capa de abstracción sobre una gran cantidad de escenarios que ahorran muchos dolores de cabeza a los desarrolladores como puede pasar con TensorFlow
.
Durante la conferencia se hizo mucho énfasis en ML Builder
ya que es fácil de usar y permite el uso de CLI, además, lo utilizan una gran cantidad de clientes internos de microsoft como puede ser la suite office, bing, y clientes externos.
Uno de los objetivos principales es optimizar el uso de modelos por medio de ONNX Runtime
y con la esperanza de dar soporte completo a C#
en PyTorch
por medio de TorchSharp
, el cual tiene como objetivo final a finales de 2022 ser capaz de consumir los algoritmos de Python desde C#.
9 - Menciones especiales
Finalmente quiero mencionar los proyectos que más me han llamado la atención de las sesiones que sucedieron durante la conferencia
- La primera, para
.NET Framework
, va a salir una nueva versión4.8.1
, habrá que ver qué es lo que nos depara - .NET Upgrade asistant, Una nueva aplicación que nos facilita con un asistente el migrar desde aplicaciones viejas como pueden ser winforms, .NET Framework a .NET 6; Enlace.
- Apss para microsoft teams, desde ahora se van a poder desarrollar aplicaciones para microsoft teams; Y funcionan no solo en escritorio, sino en móvil o en la versión web también.
- Playwright, una librería que nos permite hacer test de nuestra UI con .NET ; Enlace.
BUnit
, Una librería para hacertest unitarios en blazor
, ya hace tiempo que la sigo y me alegro de que tuviera su oportunidad aquí. Posiblemente veamos algún vídeo para el canal; Enlace.Dapr
, un software que se añade como sidecar a nuestras aplicaciones y nos abstrae muchos de los dolores de cabeza en los sistemas distribuidos como pueden ser el service discovery. Quizá lo veamos en el canal; Enlace.Yarp
, Otro reverse proxy, esta vez creado por microsoft, tiene pinta de ser reverse proxy como código, ellos lo usan en producción; Enlace.Mass transit
, Imagino que muchos conoceréis esta librería, tiene una infinidad de utilidades, principalmente actuar como una capa por encima del service bus. Posiblemente en el blog en el canal durante 2022; Enlace.IoT
, Durante los tres días hemos tenido sesiones de .NET corriendo en lugares extraños, como puede ser una raspberry pi, o una e-ink tablet remarkable 2, hay varias sesiones sobre ello si te interesa el tema.