Saltar al contenido

MediatR ¿cuándo y por qué debería usarlo? vs 2017 webapi

Puede que se de el caso de que encuentres alguna incompatibilidad con tu código o proyecto, recuerda probar siempre en un ambiente de testing antes añadir el código al proyecto final.

Solución:

¿Es porque puedo pasar un solo objeto en mi constructor en lugar de una multitud de interfaces?

No.

¿Es un reemplazo o competidor de ServicesBus, etc.?

No.

Básicamente, cuáles son los beneficios y qué problema resuelve.


Entre otras cosas, uno de los problemas MediatR está tratando de resolver es Explosión de constructor DI en tus Controladores MVC

public DashboardController(
    ICustomerRepository customerRepository,
    IOrderService orderService,
    ICustomerHistoryRepository historyRepository,
    IOrderRepository orderRepository,
    IProductRespoitory productRespoitory,
    IRelatedProductsRepository relatedProductsRepository,
    ISupportService supportService,
    ILog logger
    )  

Este es un tema muy debatido y no existe una solución única para todos, eche un vistazo a esta pregunta.

¿Cómo evitar la locura del constructor de inyección de dependencia?

Si desea ocultar dependencias detrás de aún más abstracciones, entonces en este punto querrá echar un vistazo a todas las opciones, como refactorizar, separar un poco más las preocupaciones u otras técnicas.

Con toda honestidad, el problema de ejemplo y la solución que se dan en el MediatR el sitio web es un poco sospechoso, sin embargo, tiene sus usos. En resumen, debe elegir lo que sea adecuado para usted y su entorno.

Descripción general del patrón de mediador

Un mediador es un objeto que toma decisiones sobre cómo y cuándo los objetos interactúan entre sí. Encapsula el “cómo” y coordina la ejecución según el estado, la forma en que se invoca o la carga útil que le proporciona.

En lo que respecta al espíritu de su pregunta, realmente debería echar un vistazo a este sitio:

Simplificando el desarrollo y separando preocupaciones con MediatR

MediatR es una implementación de código abierto del patrón de mediador que no intenta hacer demasiado y no hace magia. Le permite redactar mensajes, crear y escuchar eventos utilizando patrones sincrónicos o asincrónicos. Ayuda a reducir el acoplamiento y a aislar las preocupaciones de solicitar el trabajo a realizar y crear el manipulador que despacha el trabajo.

Más sobre el patrón de mediador

¿Puede, en su propia opinión, describir por qué lo usaría?

El patrón de mediador ayuda a desacoplar su aplicación a través de la comunicación a través de un mediador (es una cosa).

Por lo general, un programa se compone de una gran cantidad de clases. Sin embargo, a medida que se agregan más clases a un programa, el problema de la comunicación entre estas clases puede volverse más complejo. Esto hace que el programa sea más difícil de leer y mantener. Además, puede resultar difícil cambiar el programa, ya que cualquier cambio puede afectar el código en varias otras clases.

Con el patrón de mediador, la comunicación entre objetos se encapsula dentro de un objeto mediador. Los objetos ya no se comunican directamente entre sí (desacoplamiento), sino que se comunican a través del mediador. Esto reduce las dependencias entre los objetos que se comunican, reduciendo así el acoplamiento.

En el software moderno, el patrón de mediador generalmente se encuentra dentro de muchos marcos, sin embargo, puede crear el suyo propio o usar uno de los muchos que están disponibles.

A partir de aquí, creo que probablemente debería investigar más, quiero decir, por lo general, se da cuenta de que necesita estas cosas antes de investigarlas, sin embargo, en este caso, creo que realmente necesita encontrar algunos buenos ejemplos para saber si desea el Patrón de mediador. , y aún más El MediatR Biblioteca

Actualizar

wired_in tuvo un gran comentario práctico sobre esto

Todo lo que hace MediatR es localizar a un manipulador para una solicitud. Ese no es el patrón del mediador. El “mediador” en este caso, no describe cómo se comunican dos objetos, utiliza la inversión de control que ya se está utilizando en una aplicación y solo proporciona una capa inútil de abstracción que solo sirve para hacer que una aplicación sea más difícil de razonar como un entero. Ya logra el desacoplamiento mediante el uso de inyección de constructor estándar con IoC. No entiendo por qué la gente compra esto. Creemos múltiples raíces compuestas para no tener que poner interfaces en nuestro constructor.

y

El OP está completamente justificado al cuestionar el punto de MediatR. Las principales respuestas que escucho a la pregunta implican explicar el uso del patrón de mediador en general, o que hace que el código de llamada sea más limpio. La primera explicación asume que la biblioteca MediatR realmente implementa el patrón de mediador, que está lejos de ser claro. Esto último no es una justificación para agregar otra abstracción sobre un contenedor de IoC ya abstraído, que crea múltiples raíces compuestas. Simplemente inyecte el controlador en lugar de localizar el servicio

Es solo una forma de implementar la comunicación entre sus componentes lógicos comerciales.

Imagina que tienes:

FirstRequest // which handled by FirstRequestHandler(FirstRequest)
SecondRequest // which handled by SecondRequestHandler(SecondRequest)
ThirdRequest // which handled by ThirdRequestHandler(ThirdRequest)

… Hay cientos de ellos …

Y luego viene ComplexRequest, cuando ComplexResponse tiene que ser una combinación de FirstResponse y ThirdResponse.

¿Cómo deberíamos solucionar esto?

Bueno, ComplexRequestHandler tendría que inyectar FirstHandler y ThirdHandler, obtener sus resultados y combinarlos.

Pero, ¿por qué ComplexRequestHandler debería tener acceso a la interfaz FirstRequestHandler? ¿Por qué deberíamos molestarnos en inyectar First, Third … OneHundredAndTwentythHandler en nuestro ComplexHandler?

Lo que MediatR nos da en tal caso de uso, es un tercero que nos dice: “Denme una solicitud y” le daré la respuesta correcta, ¡créanme! “

Entonces ComplexHandler no sabe nada sobre los primeros y terceros controladores. Solo conoce las solicitudes y respuestas requeridas (que generalmente solo envuelven los DTO).

Nota: No tiene que usar necesariamente la biblioteca MediatR para eso. Puede leer sobre el Patrón de mediador e implementar uno usted mismo.

Reseñas y calificaciones del post

Recuerda que tienes autorización de glosar si te ayudó.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *