Sobes.tech
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
}

ეს მიდგომა ეხმარება პასუხისმგებლობების განაწილებაში და გამარტივებს შენარჩუნებას.