Junior — Middle
Чын долбоорлордо Chain of Responsibility паттернин колдонуу тажрыйбаңызды сүрөттөп бере аласызбы?
sobes.tech AI
AIден жооп
Менин Go долбоорумда, Chain of Responsibility үлгүсүн колдонуп, HTTP суроолорун ар башка текшерүү жана уруксат деңгээлдери менен иштеттим. Занжырдагы ар бир иштетүүчү белгилүү бир шартты текшерчү — мисалы, токендин жарактуулугу, кирүү укуктары, маалыматтын форматы — жана суранычты иштетет же кийинкиге өткөрөт. Бул ийкемдүү жаңы текшерүүлөрдү кошууга мүмкүндүк берди, бар коду өзгөртпөстөн жана окумдуулугун жакшыртты.
Жөнөкөйлөштүрүлгөн мисал:
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
}
Бул ыкма жоопкерчиликтерди бөлүүгө жардам берет жана тейлөөдө жеңилдик жаратат.