Aller au contenu

Chain of Responsibility

Contexte : Éviter de coupler l’émetteur d’une requête à son récepteur en donnant à plusieurs objets la chance de traiter la requête. Chaîner les objets récepteurs et passer la requête le long de la chaîne.

public abstract class Handler
{
protected Handler _next;
public void SetNext(Handler next) => _next = next;
public abstract void HandleRequest(int request);
}
public class ConcreteHandlerA : Handler
{
public override void HandleRequest(int request)
{
if (request < 10) Console.WriteLine("Handler A handled");
else _next?.HandleRequest(request);
}
}

Framework de journalisation : Les enregistreurs avec différents niveaux (INFO, DEBUG, ERROR) forment une chaîne. Si un enregistreur ne peut pas traiter un niveau, il passe au suivant.

Exemple : Le pipeline de middleware ASP.NET Core est une chaîne de responsabilité. Chaque middleware décide de traiter ou de passer au suivant. Également, ValidationHandler dans FluentValidation.