Chain of Responsibility – fluxuri de procesare în lanț

  • Doru Bulubasa
  • 10 December 2025

În arhitectura software, Chain of Responsibility (CoR) este un pattern comportamental care îți permite să procesezi cereri printr-un lanț de handleri, fără ca expeditorul să știe care obiect o va trata. Fiecare handler decide: procesează cererea sau o pasează mai departe.

Este un pattern excelent pentru:

  • validări succesive

  • middleware-uri

  • procesarea mesajelor

  • pipeline-uri

  • aprobări în fluxuri enterprise


Conceptul din spatele Chain of Responsibility

Ideea este simplă: ai o serie de obiecte, fiecare cu responsabilitatea lui. Când o cerere intră în lanț, fiecare handler verifică dacă poate să o proceseze. Dacă nu, o trimite mai departe.

Avantaje:

  • decuplare totală între emitent și procesor

  • flexibilitate în modificarea lanțului

  • adăugare ușoară de noi pași în flux


Exemplu în C# (.NET)

Vom construi un lanț de validări pentru un request simplu.

1. Definim abstract Handler-ul

public abstract class Handler
{
    private Handler _next;

    public Handler SetNext(Handler next)
    {
        _next = next;
        return next;
    }

    public virtual void Handle(Request request)
    {
        if (_next != null)
            _next.Handle(request);
    }
}


2. Creăm handler-ele concrete

public class AuthHandler : Handler
{
    public override void Handle(Request request)
    {
        if (!request.IsAuthenticated)
            throw new Exception("User not authenticated!");

        Console.WriteLine("Auth OK");
        base.Handle(request);
    }
}

public class ValidationHandler : Handler
{
    public override void Handle(Request request)
    {
        if (string.IsNullOrWhiteSpace(request.Data))
            throw new Exception("Invalid data!");

        Console.WriteLine("Validation OK");
        base.Handle(request);
    }
}

public class LoggingHandler : Handler
{
    public override void Handle(Request request)
    {
        Console.WriteLine("Logged request");
        base.Handle(request);
    }
}


3. Clasa Request

public class Request
{
    public bool IsAuthenticated { get; set; }
    public string Data { get; set; }
}


4. Configurăm lanțul

var request = new Request
{
    IsAuthenticated = true,
    Data = "Hello!"
};

var handler = new AuthHandler();
handler
    .SetNext(new ValidationHandler())
    .SetNext(new LoggingHandler());

handler.Handle(request);


Ce obținem?

Executarea fluxului:

Auth OK
Validation OK
Logged request

Când folosim Chain of Responsibility în .NET?

✔ Pipelines în ASP.NET Core (middleware-uri)

✔ Validări multiple la trimiterea unui formular

✔ Mesaje procesate secvențial în queue-uri

✔ Fluxuri de aprobare (aprobator → manager → director)

✔ Orice sistem unde pașii trebuie să fie decuplați

🤖 Întreabă AI despre acest articol

AI Răspuns generat de AI pe baza acestui articol.
AI scrie răspunsul…

Scrie un comentariu

Adresa de mail nu va fi publicata. Campurile obligatorii sunt marcate cu *