Junior — Middle
Pouvez-vous décrire votre expérience dans l'application du pattern Chain of Responsibility dans des projets réels?
sobes.tech IA
Réponse de l'IA
Dans l’un de mes projets en Go, j’ai utilisé le patron Chain of Responsibility pour traiter les requêtes HTTP avec différents niveaux de validation et d’autorisation. Chaque gestionnaire dans la chaîne vérifiait une condition spécifique — par exemple, la validité du jeton, les droits d’accès, le format des données — et traitait la requête ou la transmettait au suivant dans la chaîne. Cela a permis d’ajouter de nouvelles vérifications de manière flexible sans modifier le code existant et a amélioré la lisibilité.
Exemple d’implémentation simplifiée :
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
}
Cette approche aide à diviser les responsabilités et facilite la maintenance.