En los últimos tiempos no he podido escribir con toda la frecuencia que me gustaría, pero no por ello he dejado de trabajar con .NET y coleccionar multitud de recursos que me han permitido mejorar mucho mi conocimiento con este framework.
Tabla de contenidos
SharpLab C# interactivo y online
SharpLab permite correr código C# desde el navegador, además de inspeccionar tanto el resultado como el código intermedio generado. Para mí es una herramienta imprescindible para realizar pruebas de código, prototipar y realizar ejemplos. Además, al ser todo online, puedes compartir el resultado fácilmente con tus compañeros, con solo mandarles tu url.
Coyote
Coyote es un proyecto creado por Microsoft que permite resolver uno de los problemas más difíciles de detectar, los errores en aplicaciones multihilo. Si has programado algún tipo de aplicación de este estilo, seguramente conocerás que hay varias técnicas para sincronizar hilos o procesos, como semáforos, locks, monitores, barreras, etc. Sin embargo, crear código que los use sin producir interbloqueos suele ser muy complejo. Por esta razón Microsoft ha desarrollado esta librería, la cual prueba tu código multitud de veces y si detecta algún error te guarda el escenario para que puedas reproducirlo. Reproducir un interbloqueo es muy complicado, porque en desarrollo es difícil tener el tráfico necesario para que se produzca, por eso este recurso me parece excelente y añade una gran mejora al ecosistema .NET
La imagen superior ha sido obtenida de este artículo en inglés con una guía detallada de su uso.
Migrar al nuevo formato de CsProj
Si estas un poco al tanto de los cambios en el ecosistema .NET, te habrás dado cuenta de que de un tiempo a estar parte, Microsoft se está moviendo y haciendo cambios muy rápido. Muchos de ellos son retrocompatibles, pero algunos de ellos no, como el nuevo formato de los ficheros de configuración de un proyecto en Visual Studio (CsProj). Seguramente antes o después te toque afrontar este cambio de formato para tus proyectos antiguos, así que la herramienta CsProjToVs2017 te ayudará haciendo este proceso prácticamente automático.
Compilaciones reproducibles y depuración de librerías
Uno de los últimos cambios que han añadido la gente de Microsoft al ecosistema .NET es la vinculación entre la compilación producida y el código fuente que la generó (Souce Link). Esto viene al solucionar el problema de depurar errores cuando piensas que esto sucede en el código de otros, de los cuales no tienes su código fuente. En el mundo Open Source, el código fuente está disponible, sin embargo, en la mayoría de lenguajes trabajabamos con librerías que ya han sido compiladas, no con el código fuente de las mismas, lo que implica complejidad a la hora de depurarlas. Este nuevo recurso lo que nos va a permitir es enlazar ambas cosas; librería precompilada y código fuente que la generó, de tal manera que no tengamos que distribuir el código fuente al instalar la librería. ahorrando recursos.
Para poder enlazar la librería con el código fuente que lo generó, hay que usar lo que han denomidado Reproducible builds, que no es más que crear compilaciones que siempre tengan el mismo resultado. En resumidas cuentas, hacer que las compilaciones sean idempotentes. Si te suena esta palabra, sabrás que todo lo relacionado con la idempotencia suele traer mucha complejidad asociada, por ejemplo crear funciones idempotentes no siempre es sencillo, pero en el caso de las compilaciones podemos conseguirlo instalando un pequeño paquete que Microsoft nos proporciona o editando a mano las siguientes propiedades del CsProj.
Generar la cobertura de código
Para generar el código en .NET hay mutltud de caminos, el más sencillo utilizar Visual Studio Enterprise, aunque es de pago, por ello también podemos recurrir a Coverlet como herramienta para generar la cobertura. Sin embargo, perdemos una de las grandes ventajas de usar Visual Studio Enterprise, que es ver en tiempo real en el editor qué partes del código están cubiertas y cuales no. Para ello podemos utilizar uno de los recursos que para mi se han vuelto imprescindibles, la extensión FineCodeCoverage.
Como se puede ver en la imagen superior, a la izquierda del código nos mostrará una línea verde si esa línea se ha cubierto con test, amarilla si está cubierta parcialmente o roja si no se ha cubierto. Además, esta extensión también nos da más información sobre el proyecto en general, como se puede ver en la captura inferior:
Dotnet Format o cómo dar formato a tu proyecto .NET rápidamente
Otro problema muy común que me suelo encontrar es trabajar con un proyecto donde no está definido un formato o estilo de código, así que cada programador introduce sus cambios con el formato que mas le gusta, unos con espacios, otros con tabuladores, saltos de línea distintos según el sistema operativo que usen etc. Como bien dice el libro Clean Code, es muy importante mantener un formato igual en todo el código y evitar ver en Git miles de líneas cambiadas donde el único cambio que hay es el formato de las mismas.
Para dar un formato común a un proyecto o solución en .NET hay varias opciones, desde establecer la configuración en el IDE o usar una extensión que formetee el código, hasta usar un fichero de configuración .editorconfig, esta última para mí es la mejor opción. Esto es debido a que este fichero se subirá al repositorio y todos los trabajadores usarán la misma versión y se verán obligados a usar el formato o estilo de código definido.
Una vez que tenemos definido este fichero, lo mejor es usar esta herramienta para formatear todo el código con el nuevo estilo y luego empezar a desarrollar con todos los cambios de formato ya aplicados. También la podemos configurar con un hook de Git para que se de formato al código antes de hacer un commit y así evitamos subir cambios de código con el formato incorrecto.
Recursos para aprender a usar microservicios en .NET
Otra cuestión cada día más usada por más y más empresas son las arquitecturas basadas en microservicios, sin embargo, poca gente conoce cómo resolver los problemas que estas plantean como la comunicación de los mismos o cómo dividir los servicios. Como una buena introducción a este mundo para la gente que somos de .NET (aunque muchos conceptos son generalistas y les servirán a todos), recomiendo trastear con el repo eShopOnContainers.
En la imagen superior puedes ver la arquitectura que ellos plantean, cómo comunican los servicios, el uso de eventos y otras buenas prácticas. Además, lo mejor de este recurso es que viene acompañado de un libro que resume las principales cosas que debes saber sobre microservicios.
APIs de alto rendimiento
Otra cuestión interesante que ya hemos tratado en este blog es si C# nos permite obtener programas de alto rendimiento o no. La verdad es que C# y la plataforma .NET cada vez está más orientada a permitir desarrollar cualquier tipo de aplicación, consiguiendo un rendimiento muy bueno. En este caso las APIs de alto rendimiento de las que os vengo a hablar están implementadas en un paquete especial denomiado Microsoft.Toolkit.HighPerformance el cual contiene multitud de novedades relativas al manejo de memoria 2D y al cacheado de datos para optimizar los desarrollos. En este artículo puedes ver una explicación detallada de esto gran recurso para .NET.
Asistente para la actualización automática a .NET 5
Con .NET 5 siendo la última versión y .NET 6 preparandose para lanzarse a final de año, os encontrareis muchos proyectos que están anclados en versiones más antiguas de .NET, lo cual les va a dejar poco a poco sin soporte y a corto plazo sin novedades y sin poder utilizar las nuevas características de C#9 en adelante.
Como todos sabemos, las migraciones ni son fáciles ni suelen ser automáticas, por ello desde Microsoft han intentado mejorar este proceso creando un asistente para la actualización automática de los proyectos a .NET 5. Actualmente está en pruebas y seguramente no consiga hacer todos los cambios necesarios, pero puede ser una forma de empezar la migración.
Jorge Durán
Latest posts by Jorge Durán (see all)
- [Remix] Multitud de recursos para .NET - 18 junio, 2021
- ¿Qué es un puntero y cómo se usan? - 4 junio, 2021
- Los 10 mejores paquetes nuget que tienes que instalar - 26 abril, 2021