Como cada año Microsoft nos trae novedades anuales para desarrolladores en su conferencia Net Conf.
Y como en cada edición, creo este post, el cual sirve como resumen rápido sobre los temas que se tocaron, no entro en profundidad en ninguno de ellos, ya que en total son 40 horas de contenido.
En este post no me voy a centrar en las funcionalidades o características que mostraron de Azure, ya que yo personalmente no utilizo Azure, y en mi opinión “abusaron” de su uso, prácticamente cualquier funcionalidad que mostraban la mostraban después con Azure.
Índice
1 - Novedades NET 7
Siguiendo el orden que llevó la conferencia, donde primero entraron fue en la presentación de NET 7 vamos al lío.
Como en otras ediciones mucho hincapié, pero mucho, en el rendimiento, .NET 7 tiene el runtime más rápido de todos, como es de esperar. Y como lleva demostrando en los últimos años, lo que Microsoft está buscando es un ecosistema para todos los dispositivos y plataformas.
Respecto al rendimiento han mencionado que especialmente ha mejorado en arquitecturas Arm64, para la que también han estado muy centrados últimamente.
- Aqui tienes una lista con todos los cambios de rendimiento.
Desde luego estos cambios son importantes para todos los que trabajamos con tecnologías en la nube, ya que incluso 1% más rápido que la versión anterior puede significar miles de euros a final de mes.
Recomendación: actualizar a Net 7; en el caso de este blog, la semana que viene se actualizará.
- Nota: si habéis estado utilizando las versiones preview o las release candidate, puede ser que tengais algún breaking change con estas nuevas funcionalidades incluidas, pero no debería haber ninguno con versiones de .NET 6 o anteriores.
Por cierto, recordad que NET 7 es “short term support
” eso quiere decir que a los 6 meses de salir NET 8 dejará de recibir actualizaciones de soporte, lo mismo que sucedió en su día con Net 5.
Finalmente en este apartado, mencionar que .NET viene instalado en el sistema en algunas distribuciones de Linux, como son Ubuntu, Fedora, y RedHat.
1.1 - C# 11, rate limiting y más
Con la llegada de .NET 7 también nos llega C# 11 el cual vimos en detalle en este post, y F# 7, del cual no tengo ni idea.
Además tenemos mejoras en librerías muy importantes como son System.Json
y esto me alegra, ya que hasta hace poco siempre he tenido que utilizar `Newtonsoft.Json
` porque la propia de microsoft, no estaba tan completa, o bueno, no tenia tantas características como la otra, pese a que los Json hoy por hoy son una de las partes más importantes de las aplicaciones web. Por ejemplo, ahora va a dar soporte a la nueva keyword required.
2 - Mejoras ASP.NET Core en .NET 7
Dentro de ASP.NET Core hubo muchas pequeñas mejoras, que al final todas son importantes, para mí las más importantes son las siguientes:
2.1 - gRPC en ASP.NET Core 7
El rendimiento en gRPC en comparación con otros lenguajes también es otro punto que mencionaron en múltiples presentaciones, y bueno, aquí podemos ver el por qué, como dijeron “el mejor de la clase”.
Es entendible que se centren tantísimo en el rendimiento, porque a la larga, que una llamada a un servicio tarde 10 milisegundos menos, significa que va a ser, no solo más rápida, sino que va a utilizar menos recursos y por lo tanto tu sistema puede soportar más llamadas, o en el peor de los casos, costarte menos dinero al bolsillo.
2.2 - Cambios en SignalR
SignalR hubs permiten inyección de dependencias que siempre esta bien.
2.3 - Cambios en Minimal APIs en ASP.NET Core 7
No podemos irnos de ASP.NET Core sin añadir cositas nuevas a las minimal APIs, ya dije en su dia mi opinión y actualmente sigo pensando lo mismo, muy bien para proyectos pequeños o de hobby, pero, en mi opinión no son la mejor idea para servicios empresariales.
En cualquier caso la mejora es que ahora podemos incluir descripciones para la generación de la especificación de OpenAPI, lo cual siempre está bien.
2.4 - Suite de características por defecto
Mencionar también todas esas funcionalidades y librerías que nos da el lenguaje para incluir funcionalidades, las cuales nos las da el propio lenguaje, por ejemplo, el rate limiting, el cual veremos en un vídeo, output cache, mejorado y optimizado el soporte de HTTP 2
y HTTP 3
, con los últimos protocolos y standards como QUIC
en HTTP 3
.
2.5 - Dev-tunnels
Mención especial a una funcionalidad muy buena que puede ayudar a mucha gente, he dicho que no iba a poner nada de Azure, pero en este caso he tenido que hacer una excepción.
Básicamente dev-tunnels es un SDK que nos permite crear un túnel entre nuestra aplicación desplegada en Azure y nuestra aplicación en local y podemos debuggear dicha aplicación desde el código en local.
- Dejo el repo de GitHub por aquí.
2.6 - Migrar a ASP.NET Core
Uno de los problemas que muchos que me contactáis ya sea en privado o por los comentarios de youtube es que el proyecto API en el que estáis es .NET Framework y migrar es casi imposible.
Bueno, el equipo de .NET, ha pensado en eso, y ha introducido una funcionalidad en Visual Studio que te permite migrar apps de una forma muy sencilla.
En resumidas cuentas lo que hace es poner una aplicacion ASP.NET Core justo delante de tu app y por detrás configura un proxy inverso como YARP (que vimos en el blog) y luego vas moviendo endpoints de uno en uno a la nueva app, por lo tanto puedes migrar poco a poco.
3 - Mejoras Blazor en .NET 7
Uno de los puntos que más me alegra de ver, ya que personalmente no veo que blazor esté siendo adoptado por una gran cantidad de empresas, comparado con los frameworks de JavaScript como podrían ser React o Vue y tenía algo de miedo a que microsoft lo abandonará, pero veo que no ha sido así (probablemente por hybrid/maui apps) y esto me alegra ya que este blog está escrito en Blazor.
Hubo una gran cantidad de sesiones durante toda la conferencia pero principalmente podemos nombrar lo siguiente:
Una gran mejora sobre las herramientas para hacer debug en blazor WebAssembly. Cualquiera que haya trabajado con Blazor sabe que el modo debug no funciona muy bien, bueno pues la promesa de que ha mejorado está ahí. Lo podré corroborar personalmente en las próximas semanas.
El Javascript interop también ha cambiado, aunque a nivel de usuario no nos afecta en nada ya existente pero sí en nuevas características.
La principal para mi es que el NavigationManager
tiene soporte para identificar cuando un usuario se va de la página, así podemos configurar que salte una alerta cuando un usuario intenta salir de una página y tiene contenido sin guardar, algo totalmente básico en páginas con formularios.
Luego hay otros cambios como mejorar el hot reload. Plantillas vacias, osea que ya no nos vendran con los acabados lilas y negros que traian, dentro de las plantillas, la libreria o funcionalidad QuickGrid
, que nos permite crear tablas de una forma muy sencilla y con toda la funcionalidad que buscas en una tabla, como la capacidad de buscar, paginación, formatear las tablas, ordenar, etc. Además de eso optimizaciones varias.
Pero principalmente me quiero centrar en el siguiente punto:
3.1 - Soporte para componente personalizados en Blazor
He querido hacer un punto aparte para este apartado dentro de Blazor, ya que la funcionalidad me parece una locura, en el blog, veremos un ejemplo de como funciona, pero es brutal.
Todo se resume en que puedes ejecutar tus componentes Blazor desde aplicaciones ejecutadas en JavaScript (Angular, vue, react, etc).
Lo cual es una funcionalidad que puede hacer que muchas empresas migren de un servicio al otro, porque la forma en la que funciona es, tienes la app en JS corriendo dentro de una aplicación blazor pero el usuario ve la página en tu app de angular normal, luego dentro de tu program.cs registrar el componente que quieras utilizar de Blazor y luego desde la página JavaScript simplemente lo invocas con el nombre que le hayas dado al registrarlo.
Una funcionalidad muy buena que veremos en el blog en el futuro.
Como nota final, Steve Sanderson, demostró esta funcionalidad en un blog de wordpress.
4 - .NET MAUI en .NET 7
Finalmente ha sido lanzado, bueno técnicamente fue lanzado a finales de mayo, pero aparte de un par de charlas o vídeos no hemos visto nada, y ha sido hoy, cuando en mi opinión se puede dar MAUI cómo lanzado.
Casi seguro veremos algo de MAUI en el canal durante 2023, porque le tengo muchas ganas. Y así podré decir que es un blog en el que también tenemos contenido para crear aplicaciones en IOs y Android haha.
Como en todas las conferencias, el rendimiento ha sido clave, y una de las sesiones en particular, era únicamente sobre rendimiento.
Actualizar visual studio si utilizais maui porque había un puñado bueno de bugs y bueno, han arreglado la mayoría.
La verdad es que hubo un montón de cosas sobre MAUI, muchas explicando como funciona a niveles básicos, cómo hacer botones o cómo detectar un click, etc. al final es la primera vez que lo muestran de verdad y tienen que sacar pecho.
5 - Entity Framework Core
Para mi el gran falto de la conferencia, no hubo ninguna charla en concreto sobre Entity Framework, porque si bien es cierto que vimos alguna imagen con cierta información no hubo una charla al respecto, lo cual hace pensar que no ha habido muchas mejoras desde .NET 6.
Pero la realidad es que sí hemos tenido algunas muy interesantes.
De primeras EF tiene soporte tanto para bases de datos relacionales, como para bases de datos de documentos.
También nos permite guardar columnas como json
, antiguamente si queríamos guardar un json lo hacíamos como un string
y prau, ahora pues es más específico.
6 - Otras Charlas
Finalmente una sección para mencionar algunas de las charlas que pude ver (no he podido ver todas) que más me llamaron la atención.
6.1 - StackOverflow
Entre ellas tenemos la de StackOverflow, que si bien es una charla para explicar cómo migrar a .NET 6 hace una vista global de su infraestructura y lo que tiene y simplemente destacar que el servidor donde se ubica StackOverflow tiene 1.5Tb of Ram.
6.2 - Microsoft Orleans
Hace tiempo tuve que hacer un par de PoC de Microsoft Orleans para un sistema distribuido ya que Orleans nos proporciona procesamiento distribuido y estado distribuido. Y me gusto mucho, al final no lo implantamos en el sistema, porque mi jefe no quería implementar algo que estaba en alpha. Pero para hacer aplicaciones en la nube es una tecnología muy potente.
Quizá un poco difícil de entender al principio con los grains y los silos y tal, pero una vez lo cojes es la leche. Halo (el videojuego) por ejemplo utiliza Orleans para el matchmaking, anticheat, etc. y por supuesto un montón de tecnologías de Azure, como active directory, Azure ML, microsoft Mesh, etc.
6.3 - Diseño de una nueva funcionalidad
Una de las charlas que más me gustó, sino la que más, fue la de Jared Parsons sobre el proceso que lleva el añadir una nueva funcionalidad al lenguaje, no solo en código. También a toda la parte de diseño y decisión para incluirla. Muy interesante y muy productiva.
En el mismo grupo podemos poner la charla que vino justo después con varios arquitectos del equipo de .NET explicando lo mismo, situaciones que tienen a la hora de diseñar funcionalidades.
Y mucho más
y por supuesto hubo muchas, pero que muchas otras charlas que recomiendo mirar, por ejemplo vimos el año pasado un poco sobre playwright, bueno pues este año hemos tenido una charla de verdad.
O por ejemplo la que vimos sobre low code, un montón de charlas de azure, algunas sobre github y uno platform y mucho más.