jeudi 15 novembre 2018

Comment est utilisé le Design Pattern Pipeline dans ASP.NET Core ?

Nous avons appris que pour ASP.NET Core vs ASP.NET Framework, le fichier Global.asax a disparu. Il est remplacé au profit du pattern Pipeline fournit par OWIN. Alors c'est quoi le Pattern Pipeline et comment est-il utilisé dans ASP.NET Core pour remplacer le fichier Global.asax.

Je vais essayer de répondre et d'abord en effet l'utilisation du fichier Global.asax couple l'application au serveur sur lequel elle est déployée. Autrement dit c'est alors compliqué de faire du multiplateforme comme on souhaite le faire ASP.NET Core.

La difficulté de l'exercice ici, c'est bien de reconnaitre à la fois le design Pattern Pipeline dans les design patterns reconnus et décris. Et en plus de le reconnaitre dans le code de l'application ASP.NET Core qu'il est donnée d'étudier.

Design Pattern Pipeline dans le code C#

Le Design Pattern Pipeline est évoqué ici :

Remplacement du fichier Global.asax

Le Pipeline est fournit par OWIN dans la fonction Startup au démarrage de l'application :

Démarrage d’une application dans ASP.NET Core

Dans la méthode Configure le pipeline de requêtes HTTP est configué en ajoutant des composants d'intergiciel (middleware) à une instance de l'interface IApplicationBuilder.

Ca calme légèrement nos ardeurs ! Au niveau de notre application ASP.NET Core, on est dans le fichier startup.cs, on peut voir l'interface IApplicationBuilder :

Design Pattern Pipeline au sein d'une application ASP.NET Core
Design Pattern Pipeline au sein d'une application ASP.NET Core
Voilà donc l'endroit où l'on peut trouver le Design Pattern Pipeline d'OWIN, utilisé au démarrage de l'application par ASP.NET Core.


Créer un pipeline de middleware avec IApplicationBuilder

Design Pattern Pipeline, est-ce la Chaine de Responsabilités ?

Au début il y a la définition : Wikipedia - Pipeline (software)
In software engineering, a pipeline consists of a chain of processing elements (processes, threads, coroutines, functions, etc.), arranged so that the output of each element is the input of the next; the name is by analogy to a physical pipeline.

Le problème c'est que je ne trouve pas ce Design Pattern dans la documentation classique :

DoFactory - .NET Design Patterns

Il y a bien un pattern qui s'en approche ? Et encore :

DoFactory - Chain of Responsibility
Définition : Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request. Chain the receiving objects and pass the request along the chain until an object handles it.


Design Pattern - Chain of Responsabilities
Design Pattern - Chain of Responsabilities

Pour éviter les couplages cela semble en effet un but du pattern. Et là je ne sais pas dire si ces deux patterns sont bien les même ...

Ici on se pose encore la question :

StackoverFlow :  Would this be a pipeline, a chain of responsibility, or something else?

Là le Hojjet enfonce le clou :

Hojjat Khodabakhsh - CHAIN OF RESPONSIBILITY (PIPELINE) DESIGN PATTERN


Le fameux Design Pattern - Pïpeline
Bon, ça y ressemble assez bien quand même.

Je vous avais dit que cela n'était pas si simple, il me faut continuer cette étude.

To Be Continued, en attendant je vous propose :

Merci de faire un don.

Have fun!

Aucun commentaire:

Publier un commentaire