Sobes.tech
Junior — Middle

Può descrivere la sua esperienza nell'applicazione del pattern Chain of Responsibility in progetti reali?

sobes.tech AI

Risposta dell'AI

In uno dei miei progetti in Go, ho utilizzato il pattern Chain of Responsibility per gestire le richieste HTTP con diversi livelli di validazione e autorizzazione. Ogni gestore nella catena verificava una condizione specifica — ad esempio, la validità del token, i permessi di accesso, il formato dei dati — e processava la richiesta o la passava al successivo nella catena. Questo ha permesso di aggiungere nuove verifiche in modo flessibile senza modificare il codice esistente e ha migliorato la leggibilità.

Esempio di implementazione semplificata:

package main
import "fmt"

type Handler interface {
    SetNext(handler Handler)
    Handle(request string)
}

type BaseHandler struct {
    next Handler
}

func (b *BaseHandler) SetNext(handler Handler) {
    b.next = handler
}

func (b *BaseHandler) Handle(request string) {
    if b.next != nil {
        b.next.Handle(request)
    }
}

type AuthHandler struct { BaseHandler }

func (h *AuthHandler) Handle(request string) {
    if request == "valid_token" {
        fmt.Println("Auth passed")
        h.BaseHandler.Handle(request)
    } else {
        fmt.Println("Auth failed")
    }
}

func main() {
    auth := &AuthHandler{}
    auth.SetNext(&BaseHandler{})

    auth.Handle("valid_token")  // Auth passed
    auth.Handle("invalid")      // Auth failed
}

Questo approccio aiuta a dividere le responsabilità e semplifica la manutenzione.