# Patrones de Diseño

1. **Patrón Inyección de Dependencias**

* **Por qué:** Esencial para desacoplar las dependencias entre componentes dentro del microservicio. En lugar de que las clases creen directamente sus dependencias (por ejemplo, estrategias de normalización, repositorios), estas dependencias se inyectan desde el exterior. Esto facilita la sustitución de implementaciones y la prueba de componentes.
* **Ventaja:** Aumenta la flexibilidad del código, mejora la testabilidad (facilita la inyección de mocks o stubs durante las pruebas) y centraliza la configuración de dependencias.

2. **Circuit Breacker**

* **Por qué:** Para evitar que una parte del proceso se reitere varias veces cuando tiene la probabilidad de que va a fallar, con el fin cumplir con la tolerancia a fallos como requerimiento funcional.
* **Ventaja:** Permite la ejecución del sistema sin malgastar recursos mientras el problema no se resuelva y encapsula la lógica de prevenir que un fallo se repita constantemente durante el mantenimiento.

3. **Middleware**:
   * **Por qué:** Permite agregar una cadena de procesamiento en la que cada componente puede modificar o responder a las solicitudes a medida que pasan a través de la cadena.
   * **Ventaja**: Permite interceptar y procesar mensajes de WebSocket antes de que lleguen al controlador final. Esto es útil para validar, autenticar o modificar los mensajes entrantes, quitando esa responsabilidad a los servicios encargados de recibir y enviar mensajes.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs-affiliates.inlaze.com/gaming-docs/architecture/sistema-de-sportsbook/estructura/web-sockets/patrones-de-diseno.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
