Junior — Middle
Gerçek projelerde Chain of Responsibility desenini kullanma deneyiminizi anlatabilir misiniz?
sobes.tech yapay zeka
AI'dan gelen yanıt
Go dilinde bir projede, Chain of Responsibility desenini kullanarak farklı doğrulama ve yetkilendirme seviyelerine sahip HTTP isteklerini işledim. Zincirdeki her bir işleyici, belirli bir koşulu kontrol ediyordu — örneğin, token geçerliliği, erişim izinleri, veri formatı — ve ya isteği işliyordu ya da zincirdeki bir sonraki adrese geçiriyordu. Bu, yeni kontrolleri esnek bir şekilde eklemeye olanak tanıdı, mevcut kodu değiştirmeden ve okunabilirliği artırdı.
Basitleştirilmiş bir uygulama örneği:
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 yaklaşım, sorumlulukların ayrılmasına ve bakımın kolaylaştırılmasına yardımcı olur.