Sobes.tech
Junior — Middle

¿Puede describir su experiencia en la aplicación del patrón Chain of Responsibility en proyectos reales?

sobes.tech AI

Respuesta de la IA

En uno de mis proyectos en Go, utilicé el patrón Chain of Responsibility para manejar solicitudes HTTP con diferentes niveles de validación y autorización. Cada manejador en la cadena verificaba una condición específica — por ejemplo, la validez del token, los permisos de acceso, el formato de los datos — y ya sea procesaba la solicitud o la pasaba al siguiente en la cadena. Esto permitió agregar nuevas verificaciones de manera flexible sin modificar el código existente y mejoró la legibilidad.

Ejemplo de implementación simplificada:

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
}

Este enfoque ayuda a dividir responsabilidades y facilita el mantenimiento.