Junior — Middle
Ar galite apibūdinti savo patirtį taikant Chain of Responsibility modelį realiuose projektuose?
sobes.tech AI
Atsakymas iš AI
Viename iš mano projektų Go kalba aš panaudojau Chain of Responsibility modelį, kad apdorotų HTTP užklausas su skirtingais validacijos ir autorizacijos lygiais. Kiekvienas grandinės elementas tikrindavo tam tikrą sąlygą — pavyzdžiui, tokeno galiojimą, prieigos teises, duomenų formatą — ir arba apdorodavo užklausą, arba perduodavo ją kitam grandinės elementui. Tai leido lankstesnį naujų patikrinimų pridėjimą be esamo kodo keitimo ir pagerino skaitomumą.
Supaprastintas pavyzdys:
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
}
Šis požiūris padeda atskirti atsakomybę ir palengvina priežiūrą.