Junior — Middle
Kunt u uw ervaring met het toepassen van het Chain of Responsibility-patroon in echte projecten beschrijven?
sobes.tech AI
Antwoord van AI
In een van mijn projecten in Go heb ik het Chain of Responsibility-patroon gebruikt om HTTP-verzoeken met verschillende niveaus van validatie en autorisatie te verwerken. Elke handler in de keten controleerde een specifieke voorwaarde — bijvoorbeeld de geldigheid van de token, toegangsrechten, datumnotatie — en verwerkte het verzoek of gaf het door aan de volgende in de keten. Dit maakte het mogelijk om nieuwe controles flexibel toe te voegen zonder de bestaande code te wijzigen en verbeterde de leesbaarheid.
Voorbeeld van een vereenvoudigde implementatie:
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
}
Deze aanpak helpt bij het scheiden van verantwoordelijkheden en maakt onderhoud eenvoudiger.