core
Core
NuGet.org es un repositorio en línea para paquetes de software que se aplican en el desarrollo de software con la plataforma .NET de Microsoft. Se utiliza para buscar, descargar e instalar paquetes de software, bibliotecas y frameworks de código abierto que son compatibles con la plataforma .NET.
NuGet ofrece tantas librerías que es imposible conocerlas todas, y como desarrolladores también es imposible poder utilizar todas y cada una de ellas. De hecho, se estima que hay más de 300.000 librerías disponibles en su sitio web.
Aun así, por necesidad muchas veces hay que invertir más tiempo del que nos gustaría buceando en Google para encontrar algo que se adecúe a un requerimiento en concreto, ya sea por funcionalidad, precio, sencillez, documentación…siempre se llega a encontrar algo que, si no es lo que realmente necesitas, se puede parecer bastante. Y en caso de CORE es posible que puedas extender esas mismas librerías para poder adaptarlo.
Os voy a introducir 4 librerías que a mi vista son muy útiles. No vamos a extendernos mucho en los detalles de las librerías, pero las comentaremos brevemente para, por lo menos, entender que hace cada una y las posibilidades que tienen:
Humanizr
Humanizr es una librería para manipulación y muestra de cadenas, fechas, enumeradores, tiempos, rangos, cantidadesm etc.
Por ejemplo, Humanizr tiene un método “Humanize()” que sirve para generar una cadena “human-friendly” de una cadena computerizada. Esto además es reversible, ya que también cuenta con un método Deshumanize() para poder revertir la primera operación.
«PascalCaseInputStringIsTurnedIntoSentence».Humanize() => «Pascal case input string is turned into sentence»
Una librería de lo más completa si lo que necesitas son formateos y/o manipulación de cadenas de texto, aunque también sirve para internacionalizar cantidades, fechas… Podemos utilizarla en cualquier variable que tengamos que exponer en un UI y no tengamos las ganas de formatear. En este caso, Humanizr lo hará por ti.
- Sitio web: https://github.com/Humanizr/Humanizer
HealthCheck
Personalmente, HealthCheck (siempre que también tengas importado HealthCheck.Core) es de las librerías que más me gustan, ya que a nivel funcional y visual me parece muy útil. Te permite parametrizar checks funcionales para comprobar si un sistema está en funcionamiento o está caído, o como por ejemplo para filesystem, si la cuota de almacenamiento está cerca de llenarse.
Tiene extensiones para AWS, AzureKeyVault, CosmosDB, etc. donde simplemente con importarte la extensión deseada tienes tu propio check.
Además, tiene webhooks para enviar notificaciones vía email, SMS o directamente mensajes en teams o slack. Todo ello ya incluido dentro de un UI simple pero potente.
Hangfire
Hangfire es otra de las librerías que, sin duda, más me gusta. Hangfire te permite crear procesos en background sin necesidad de crear un servicio Windows con persistencia en SQL Server o Redis, aunque ya hay algún desarrollo que incluye CosmosDB pero sin soporte oficial.
Se pueden crear jobs de una sola ejecución, recurrentes, anidados, con tiempo de demora… Y todos con un numero de intentos en caso de error. La recurrencia se puede parametrizar con timestamp o directamente con expresiones cron.
Además, incluye un UI grafico donde puedes ejecutar manualmente los jobs que se han generado incluso editarlos directamente en la interfaz.
- Sitio Web: https://www.hangfire.io/
Por último me gustaría incluir en esta lista, ya que me encanta la arquitectura de software, una librería de introducción al patrón REPR (Request-EndPoint-Response):
Todos hemos crecido con MVC, ya sea para front o para back, pero el problema de MVC es que según va creciendo la aplicación los controladores se van haciendo cada vez más difíciles de mantener.
Como ejemplo, .NET vio que las vistas, modelos, controladores y acciones de las páginas Razor se complicaba mucho a la hora del mantenimiento porque llegas a perderte dentro del sistema de archivos de la solución. De ahí que crearon Razor Pages que utiliza el mismo sistema de enrutamiento, vinculación de modelos, validaciones…pero a la hora de añadir o modificar funcionalidades tienes que cambiar dos ficheros vinculados por lo que no es necesario bucear en el fs.
ApiEndpoint es básicamente Razor Pages para Apis. Independizan los controladores y se agrupan los modelos de api utilizados en el EndPoint con la propia lógica del EndPoint. De ahí que el MVC se convierte en REPR que es mucho más simple y agrupa todo lo que tiene que ver con un Endpoint en particular. Y sobre todo, lo más importante: sigue los principios SOLID.
- Sitio Web: https://github.com/ardalis/ApiEndpoints
Y aunque para mí estos cuatro ejemplos me resultan muy útiles en mi día a día, lo cierto es que NuGet ofrece un amplio abanico de librerías que además cuentan una ventaja muy importante: son librerías mantenidas y actualizadas regularmente por los desarrolladores que las crearon. Por tanto, puedo afirmar que te ayudarán a ahorrar tiempo, a mejorar la calidad y la seguridad del código y a aumentar la interoperabilidad y la flexibilidad, entre otras cuestiones.