72 votes

MediatR quand et pourquoi devrais-je l'utiliser? vs 2017 webapi

Il pourrait avoir été posée mais je ne trouve pas de même dans le site officiel pourquoi je devrais utiliser MediatR et les problèmes qu'elle en résout?

  • Est-ce parce que je peux passer un seul objet dans mon constructeur, plutôt que d'une multitude d'Interfaces?

  • Est-ce un remplacement ou un concurrent de ServicesBus etc...

  • Fondamentalement, ce sont les avantage et quel problème est-il de résoudre

Je veux acheter dans, mais il n'est pas clair pour moi pourquoi je devrais l'utiliser.

merci beaucoup

86voto

TheGeneral Points 40470

Est-ce parce que je peux passer un seul objet dans mon constructeur, plutôt que de une multitude d'Interfaces?

Pas de.

Est-ce un remplacement ou un concurrent de ServicesBus etc...

Pas de.

Fondamentalement, ce sont les avantage et quel problème est-il de résoudre


Entre autres choses, le problème MediatR tente de résoudre est DI Constructeur Explosion dans votre contrôleurs MVC

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

C'est un sujet très controversé, et il n'y a pas de one-size-fits-all solution, prendre un coup d'oeil à cette question

Comment éviter l'Injection de Dépendance constructeur de la folie?

Si vous souhaitez masquer les dépendances derrière encore plus abstractions, puis, à ce stade, vous aurez envie de prendre un coup d'oeil à toutes les options, comme le remaniement, la séparation des préoccupations un peu plus, ou d'autres techniques.

En toute honnêteté, l'exemple du problème et de la solution donnée sur la MediatR site web est un peu suspect, cependant il a ses utilise. En bref, vous devez choisir ce qui est bon pour vous et votre environnement.

Aperçu du Médiateur Modèle

Un médiateur est un objet qui rend des décisions sur comment et quand les objets interagissent les uns avec les autres. Il encapsule le "comment" et coordonne l'exécution en se basant sur l'état, la façon dont il est invoqué ou de la charge que vous lui fournissez.

En ce qui concerne l'esprit de votre question, vous devriez vraiment jeter un oeil à ce site:

Simplifiant le Développement et la Séparation des Préoccupations avec MediatR

MediatR est une implémentation open source du médiateur motif que n'essayez pas d'en faire trop et n'effectue aucune magie. Il vous permet de composer des messages, de créer et d'écouter les événements à l'aide synchrone ou modèles asynchrones. Il aide à réduire le couplage et d'isoler l' les préoccupations de la demande de travail à faire et de la création du gestionnaire d'événements qui distribue le travail.

Plus à propos de Médiateur de Modèle

Pouvez-vous dans votre propre avis décrire pourquoi l'utiliser

Le médiateur modèle permet le découplage de votre demande par le biais de la communication par l'intermédiaire d'un médiateur (son d'une chose) .

Habituellement, un programme est constitué d'un grand nombre de classes. Cependant, comme de plus en plus les classes sont ajoutées à un programme, le problème de la communication entre ces classes peuvent devenir plus complexes. Cela rend le programme plus difficile à lire et à maintenir. En outre, il peut devenir difficile de modifier le programme, étant donné que toute modification pourrait influer sur le code à plusieurs autres classes.

Avec le médiateur modèle, la communication entre les objets est encapsulée dans un objet médiateur. Des objets plus communiquer directement les uns avec les autres (découplage), mais, au lieu de communiquer par l'intermédiaire du médiateur. Cela réduit les dépendances entre les objets communicants, réduisant ainsi le couplage.

Dans le logiciel moderne, le médiateur motif est généralement trouvé dans de nombreux cadres, mais vous pouvez créer votre propre, ou d'utiliser l'un des nombreux qui sont disponibles.

À partir d'ici, je pense que vous devriez probablement juste de faire plus de recherches, je veux dire en général, vous comprendre vous avez besoin de ces choses avant de de la recherche, mais dans ce cas je pense que vous avez vraiment besoin de trouver quelques bons exemples pour savoir si vous souhaitez que le Médiateur Modèle, et encore plus Le MediatR bibliothèque

Mise à jour

wired_in a eu la grande pratique de commentaire sur cette

Tous les MediatR n'est le service localiser un gestionnaire pour une demande. C'est pas le médiateur de modèle. Le "médiateur" dans ce cas, ne pas décrire comment deux objets de communiquer, il utilise l'inversion de contrôle qui est déjà utilisé dans une application et fournit simplement un inutile de couche d'abstraction qui ne sert qu'à faire une demande plus difficile de raisonner sur l'ensemble. Vous avez déjà réaliser le découplage par en utilisant la norme constructeur d'injection avec le Cio. Je ne comprends pas pourquoi les gens achètent cette. Nous allons créer plusieurs composite racines, juste pour que nous n'ont pas à mettre des interfaces dans notre constructeur.

et

L'OP est tout à fait justifiée en s'interrogeant sur le point de MediatR. Le top des réponses que j'entends à la question impliquer expliquant l'utilisation de le médiateur modèle en général, ou qu'il rend le code appelant nettoyeur. L'ancien explication suppose que les MediatR bibliothèque en fait met en œuvre le médiateur, qui est loin d'être clair. L' ce dernier n'est pas une justifcation pour l'ajout d'une autre abstraction sur le dessus de déjà prélevée conteneur IoC, qui crée de multiples composite les racines. Juste injecter le gestionnaire au lieu de service à la localiser

10voto

Holtz Ilya Points 118

C'est juste une façon de mettre en œuvre la communication entre votre entreprise composants de logique.

Imaginez que vous avez:

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

... il y a des centaines d'entre eux ...

Et puis vient ComplexRequest, quand ComplexResponse être une combinaison de FirstResponse et ThirdResponse.

Comment devrions-nous résoudre ce problème?

Eh bien, ComplexRequestHandler aurait à injecter FirstHandler et ThirdHandler, obtenir leurs résultats, et de les combiner.

Mais pourquoi devrait-ComplexRequestHandler devraient avoir accès à FirstRequestHandler interface ? Pourquoi devrions-nous pris la peine de les injecter des Premier, Troisième ... OneHundredAndTwentythHandler dans notre ComplexHandler ?

Ce MediatR nous donne dans ces cas d'utilisation, est un tiers qui nous dit: "Donnez-moi une demande, et je vais vous obtenir le droit de réponse, faites-moi Confiance!"

Donc ComplexHandler ne sais rien à propos de la Première et de la Troisième Gestionnaires. Il sait seulement sur les demandes et les réponses (qui sont habituellement seulement juste envelopper Otd).

Remarque: Vous ne devez pas nécessairement utiliser le MediatR de la bibliothèque pour que. Vous pouvez lire à ce sujet le Médiateur de Modèle et de mettre en œuvre un vous-même.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X