Junior — Middle
Μπορείτε να περιγράψετε την εμπειρία σας στην εφαρμογή του μοτίβου Chain of Responsibility σε πραγματικά έργα;
sobes.tech AI
Απάντηση από AI
Σε ένα από τα έργα μου σε Go, χρησιμοποίησα το μοτίβο Chain of Responsibility για την επεξεργασία αιτημάτων HTTP με διαφορετικά επίπεδα επικύρωσης και εξουσιοδότησης. Κάθε χειριστής στη αλυσίδα έλεγχαν μια συγκεκριμένη συνθήκη — για παράδειγμα, η εγκυρότητα του token, τα δικαιώματα πρόσβασης, η μορφή των δεδομένων — και είτε επεξεργαζόταν το αίτημα είτε το περνούσε στον επόμενο στη αλυσίδα. Αυτό επέτρεψε την ευέλικτη προσθήκη νέων ελέγχων χωρίς να αλλάξει ο υπάρχων κώδικας και βελτίωσε την αναγνωσιμότητα.
Παράδειγμα απλοποιημένης υλοποίησης:
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
}
Αυτή η προσέγγιση βοηθά στη διαχωρισμό των ευθυνών και διευκολύνει τη συντήρηση.