Imagen de Maitree Rimthong en Pexel

En el mundo del desarrollo de software, particularmente dentro del ecosistema de .NET, nos encontramos a menudo con encrucijadas de diseño que nos exigen tomar decisiones cruciales. Una de ellas es la elección de la librería adecuada para la implementación de patrones de diseño que faciliten la comunicación entre distintas partes de nuestras aplicaciones. Hoy, nos detendremos en un peaje obligado en este viaje: la selección de una librería para manejar patrones de mediación y mensajería. Analizaremos tres opciones populares: MediatR, MassTransit y Mediator, esta última introducida en .NET 8, para determinar cuál podría ser el mejor camino a tomar.

MediatR: El pionero en mediación ligera.

MediatR se ha convertido en un estándar de facto para la implementación del patrón de mediador en aplicaciones .NET. Su enfoque es simple: desacoplar la lógica de negocio de las capas de entrada, promoviendo un código más limpio y mantenible. Permite que los mensajes (comandos y consultas) sean manejados por handlers específicos, facilitando la segregación de responsabilidades y la prueba unitaria. Sin embargo, hay que tener en cuenta que MediatR está principalmente diseñado para trabajar dentro de los límites de un proceso único y no maneja la comunicación entre servicios distribuidos de manera nativa.

MassTransitEl gigante de la mensajería asíncrona.

Por otro lado, MassTransit es una librería robusta enfocada en la mensajería asíncrona y los sistemas distribuidos. Ofrece una abstracción sobre varios sistemas de transporte de mensajes como RabbitMQ, Azure Service Bus, entre otros. Su propósito es facilitar la construcción de aplicaciones que requieran patrones como Publish/Subscribe, Request/Response y Sagas. MassTransit es ideal para escenarios donde se necesita escalar horizontalmente y trabajar con microservicios. Aunque su curva de aprendizaje puede ser más pronunciada, su capacidad para manejar la complejidad de la comunicación entre servicios lo convierte en una opción poderosa.

Programado de cero: La Alternativa de Construcción Propia.

Una ruta alternativa en la intersección de las decisiones de diseño de software es la creación de un mediador personalizado. Esta opción te permite construir una solución a medida, adaptada a las necesidades específicas de tu aplicación y a las preferencias de tu equipo de desarrollo. Al desarrollar tu propio mediador, tienes el control completo sobre su comportamiento y la flexibilidad para incorporar exactamente las funcionalidades que requieres.

La implementación propia puede ser tan simple o compleja como lo desees. Puedes optar por una solución sin reflexión y sin genéricos, lo que podría resultar en un código más sencillo de entender y depurar, aunque potencialmente más verboso y menos flexible. Por otro lado, emplear genéricos y reflexión te permite escribir un mediador más dinámico y extensible, capaz de manejar una variedad de solicitudes sin necesidad de una extensa codificación específica para cada caso.

Una ventaja significativa de esta aproximación es la eliminación de dependencias externas, lo que puede simplificar el proceso de despliegue y reducir el riesgo de conflictos de versiones o incompatibilidades. Además, al ser los autores del código, el equipo tiene un conocimiento más profundo de su funcionamiento interno, facilitando el mantenimiento y la resolución de problemas.

No obstante, construir tu propio sistema de mediación también conlleva sus desafíos. El diseño e implementación requieren un tiempo y esfuerzo considerables, y podrías encontrarte reinventando la rueda si no se realiza un análisis exhaustivo de las soluciones existentes. Además, la responsabilidad de garantizar la robustez, el rendimiento y la seguridad del mediador recae enteramente en tu equipo. La documentación y las pruebas se vuelven críticas, especialmente si la solución va a ser utilizada en múltiples proyectos o por diferentes equipos.

Conclusión

La elección entre MediatR, MassTransit y Mediator dependerá en gran medida de las necesidades específicas de nuestro proyecto.

Si buscamos una solución ligera y directa para un único proceso, MediatR puede ser la opción más adecuada si no quieres desarrollarlo tu. Por el contrario, si nuestro horizonte incluye sistemas distribuidos y la necesidad de manejar patrones de mensajería complejos, MassTransit podría ser el peaje a pagar.

Revisa el estudio y saca tus propias conclusiones

Tienes que poner la balanza en juego y pagar el peaje por cada una de las opciones disponibles.

Nota:

Me gustaría pedirte que tengas en cuenta que la programación de este ejemplo se llevó a cabo durante las últimas horas de la noche, después de una jornada de trabajo particularmente larga y desafiante. Por ello, te agradezco de antemano tu comprensión si encuentras partes del código que no estén pulidas o ves alguna cosa un poco estridente. Estoy plenamente consciente de que puede haber aspectos que requieran una revisión y refinamiento adicional.