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
}
ეს მიდგომა ეხმარება პასუხისმგებლობების განაწილებაში და გამარტივებს შენარჩუნებას.