# Patrones de Diseño

1. **Patrón Strategy**

* **Por qué:** Permite encapsular diferentes algoritmos en clases independientes. En este caso, se necesita normalizar datos JSON provenientes de distintas interfaces, cada una con su propio formato y reglas. El patrón Strategy permitiría seleccionar y aplicar la estrategia de normalización adecuada en tiempo de ejecución según el tipo de interfaz identificada.
* **Ventaja:** Facilita la extensión del sistema al permitir la adición de nuevas estrategias de normalización sin modificar el código existente.

2. **Patrón Factory Method**

* **Por qué:** El patrón Factory Method es útil para crear instancias de las estrategias de normalización correctas en función del tipo de interfaz JSON. En lugar de instanciar directamente las estrategias en el código, una fábrica centraliza la lógica de creación, lo que simplifica el mantenimiento y la evolución del sistema.
* **Ventaja:** Desacopla la creación de objetos de su uso, facilitando la gestión de dependencias y la introducción de nuevas estrategias.

3. **Patrón Repository**

* **Por qué:** Abstrae el acceso a la base de datos, permitiendo consultar y recuperar los esquemas de normalización o configuraciones necesarias sin exponer la lógica de acceso a la base de datos en el código de negocio. En este caso, se necesita buscar en la base de datos el esquema de normalización correspondiente a cada tipo de interfaz JSON.
* **Ventaja:** Mejora la mantenibilidad del código al separar la lógica de negocio de la persistencia de datos y facilita las pruebas unitarias al permitir la inyección de repositorios simulados.

4. **Patrón Facade**

* **Por qué:** Proporciona una interfaz unificada y simplificada para manejar la complejidad interna del proceso de normalización. En lugar de interactuar directamente con múltiples componentes (estrategias, repositorios, etc.), el Facade actúa como un intermediario que maneja todo el proceso detrás de una única interfaz.
* **Ventaja:** Simplifica la interacción con el sistema y reduce la complejidad para los clientes que necesitan utilizar el servicio de normalización.

5. **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.


---

# 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/interface-map-engine/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.
