Junior — Middle
Vai jūs varat aprakstīt savu pieredzi, piemērojot Chain of Responsibility paraugu reālos projektos?
sobes.tech AI
Atbilde no AI
Vienā no maniem projektiem Go valodā es izmantoju Chain of Responsibility paraugu, lai apstrādātu HTTP pieprasījumus ar dažādiem validācijas un autorizācijas līmeņiem. Katrs ķēdes elements pārbaudīja noteiktu nosacījumu — piemēram, tokena derīgumu, piekļuves tiesības, datu formātu — un vai nu apstrādāja pieprasījumu, vai nodeva to nākamajam ķēdes elementam. Tas ļāva elastīgi pievienot jaunas pārbaudes, nemainot esošo kodu, un uzlaboja lasāmību.
Vienkāršots piemērs:
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 palīdz sadalīt atbildību un atvieglo uzturēšanu.