Skip to content

Design Patterns

Este documento detalla los patrones de diseño utilizados en el worker de Auto-Restocking.

Hexagonal Architecture (Ports and Adapters)

Section titled “Hexagonal Architecture (Ports and Adapters)”
  • Descripción: Un patrón 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 dispositivos y bases de datos de tiempo de ejecución.

  • Componentes clave:

    1. Capa de dominio:
      • Interfaz QueueService: Define el puerto para operaciones de cola
      • Interfaz RestockingService: Define el puerto para operaciones de reabastecimiento
    2. Capa de infraestructura:
      • AwsQueueService: Adaptador que implementa la interfaz QueueService
      • HttpRestockingService: Adaptador que implementa la interfaz RestockingService
    3. Casos de uso:
      • AutoRestockWorker, AutoRestockProcessor: Utilizan los puertos sin conocer los detalles de implementación
  • Descripción: Asegura que una clase tenga solo una instancia y proporciona un punto de acceso global a ella.

  • Componentes clave:

    1. Implementación en proveedores:
      • getSQSClient(): Asegura que solo se cree un cliente SQS
      • getQueueService(): Asegura que solo se cree un QueueService
      • getRestockingService(): Asegura que solo se cree un RestockingService
      • getWorker(): Asegura que solo se cree un Worker
    2. Casos de uso:
      • Acceso consistente a servicios en toda la aplicación
      • Optimización de recursos mediante la reutilización de instancias
  • Descripción: Crea objetos sin exponer la lógica de instanciación al cliente.

  • Componentes clave:

    1. Implementación en proveedores:
      • getSQSClient(): Fábrica para crear clientes SQS
      • getQueueService(): Fábrica para crear instancias de QueueService
      • getRestockingService(): Fábrica para crear instancias de RestockingService
      • getWorker(): Fábrica para crear instancias de Worker
    2. Casos de uso:
      • Creación centralizada de objetos complejos
      • Desacoplamiento de la creación de objetos de su uso
  • Descripción: Un patrón de programación funcional que representa un valor de uno de dos tipos posibles, típicamente utilizado para el manejo de errores.

  • Componentes clave:

    1. Implementación en todo el código:
      • Either<BusinessError, T>: Representa un error o un resultado exitoso
      • EitherAsync: Versión asíncrona de Either
    2. Casos de uso:
      • Manejo de errores en AutoRestockProcessor.process()
      • Manejo de errores en AutoRestockWorker.run()
      • Manejo de errores en implementaciones de servicios