Sobes.tech
Junior — Middle

Haqiqiy loyihalarda Chain of Responsibility naqshini qo'llash bo'yicha tajribangizni ta'riflab berishingiz mumkinmi?

sobes.tech AI

AIdan javob

Go loyihamda, Chain of Responsibility naqshini ishlatib, turli darajadagi validatsiya va ruxsat berish bilan HTTP so'rovlarini boshqardim. Zanjirdagi har bir handler muayyan shartni tekshirardi — masalan, tokenning amal qilish muddati, kirish huquqlari, ma'lumotlar formati — va so'rovni yoki qayta ishlardi yoki zanjir bo'ylab keyingisiga o'tkazardi. Bu yangi tekshiruvlarni mavjud kodni o'zgartirmasdan qo'shishga imkon berdi va o'qilishini yaxshiladi.

Soddalashtirilgan amalga oshirish misoli:

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
}

Bu yondashuv mas'uliyatlarni bo'lishga yordam beradi va texnik xizmat ko'rsatishni osonlashtiradi.