Sobes.tech
Junior — Middle

Können Sie Ihre Erfahrung bei der Anwendung des Chain of Responsibility-Musters in realen Projekten beschreiben?

sobes.tech KI

Antwort von AI

In einem meiner Projekte in Go habe ich das Chain of Responsibility-Muster verwendet, um HTTP-Anfragen mit verschiedenen Validierungs- und Autorisierungsstufen zu verarbeiten. Jeder Handler in der Kette überprüfte eine bestimmte Bedingung — zum Beispiel die Gültigkeit des Tokens, Zugriffsrechte, Datenformat — und verarbeitete die Anfrage oder leitete sie an den nächsten in der Kette weiter. Dies ermöglichte es, neue Prüfungen flexibel hinzuzufügen, ohne den bestehenden Code zu ändern, und verbesserte die Lesbarkeit.

Beispiel für eine vereinfachte Implementierung:

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
}

Dieser Ansatz hilft, Verantwortlichkeiten zu trennen und die Wartung zu erleichtern.