Skip to content

Design Patterns

Este documento detalla los patrones de diseño utilizados en el microservicio Operations Reporting.

  • Descripción: El patrón Singleton asegura que una clase tenga una única instancia y proporciona un punto de acceso global a ella. Esto es particularmente útil para gestionar recursos compartidos como conexiones a bases de datos.
  • Componentes clave:
    1. Implementación en repositories:
      • DocumentDBInventoryRepository: Utiliza una instancia estática y el método getInstance() para asegurar que solo exista una instancia
      • DocumentDBInventoryWasteRepository: Implementación similar con gestión de instancia estática
    2. Beneficios:
      • Asegura que una única conexión a la base de datos sea compartida en toda la aplicación
      • Reduce el consumo de recursos
      • Proporciona un punto de acceso consistente al repository
    3. Casos de uso:
      • Gestión de conexiones a bases de datos
      • Acceso a repositories en toda la aplicación
  • Descripción: El patrón Repository media entre el dominio y las capas de mapeo de datos, actuando como una colección en memoria de objetos del dominio.
  • Componentes clave:
    1. Interfaces en el domain:
      • InventoryRepository: Define métodos para acceder a datos de inventario
      • InventoryWasteRepository: Define métodos para acceder a datos de desperdicios de inventario
    2. Implementación en la capa de infrastructure:
      • DocumentDBInventoryRepository: Implementa la interfaz del repository de inventario usando MongoDB
      • DocumentDBInventoryWasteRepository: Implementa la interfaz del repository de desperdicios de inventario usando MongoDB
    3. Casos de uso:
      • Abstracción de la lógica de acceso a datos de la lógica de negocio
      • Habilitación de pruebas mediante inyección de dependencias
      • Proporcionar una interfaz consistente para operaciones de datos
  • Descripción: El patrón Adapter convierte la interfaz de una clase en otra interfaz que los clientes esperan, permitiendo que clases trabajen juntas que de otro modo no podrían debido a interfaces incompatibles.
  • Componentes clave:
    1. Adaptadores de servicios externos:
      • HttpProductService: Adapta el servicio externo de productos a la interfaz interna ProductService
      • HttpLocationService: Adapta el servicio externo de ubicaciones a la interfaz interna LocationService
    2. Detalles de implementación:
      • Utiliza clientes HTTP para comunicarse con servicios externos
      • Transforma formatos de datos externos a objetos del dominio
    3. Casos de uso:
      • Integración con servicios externos
      • Desacoplamiento del dominio de dependencias externas

Arquitectura Hexagonal (Puertos y Adaptadores)

Section titled “Arquitectura Hexagonal (Puertos y Adaptadores)”
  • Descripción: Aunque no es un patrón de diseño tradicional, la arquitectura hexagonal es un patrón arquitectónico que permite que una aplicación sea igualmente dirigida por usuarios, programas, pruebas automatizadas o scripts por lotes, y que se desarrolle y pruebe de forma aislada de sus eventuales dispositivos y bases de datos en tiempo de ejecución.
  • Componentes clave:
    1. Puertos (interfaces en la capa de domain):
      • Interfaces de Repository
      • Interfaces de Service
    2. Adaptadores (implementaciones en la capa de infrastructure):
      • Implementaciones de Repository
      • Controllers HTTP
      • Clientes de servicios externos
    3. Casos de uso:
      • Separación de responsabilidades
      • Facilidad de pruebas
      • Flexibilidad para cambiar componentes de infraestructura