Skip to content

Design Patterns

Este documento detalla los patrones de diseño utilizados en el worker de asignación de ubicaciones.

  • Descripción: Una técnica donde un objeto recibe otros objetos de los que depende. Estos otros objetos se denominan dependencias.
  • Componentes clave:
    1. Implementación en el proyecto:
      • EventProcessor: Recibe dependencias como función de validación, servicio de warehouse y procesadores en su constructor
      • NewProductProcessor: Recibe servicio de asignación y procesador de estado
      • StateProcessor: Recibe servicio de asignación
      • LocationAssignmentWorker: Recibe servicio de cola y procesador de eventos
    2. Beneficios:
      • Mejora la testabilidad al permitir inyectar implementaciones mock
      • Desacopla componentes, haciendo el sistema más modular
      • Soporta el Principio de Inversión de Dependencias de SOLID
  • Descripción: Proporciona una API limpia para acceder a sistemas o recursos externos, abstrayendo los detalles de implementación.
  • Componentes clave:
    1. Interfaces del dominio:
      • LocationAssignmentService: Define operaciones para crear y cambiar el estado de asignaciones de ubicación
      • WarehouseService: Define operaciones para recuperar información de warehouses
      • QueueService: Define operaciones para recibir y eliminar mensajes de una cola
    2. Implementaciones en infraestructura:
      • HttpLocationAssignmentService: Implementa LocationAssignmentService usando llamadas HTTP
      • HttpWarehouseService: Implementa WarehouseService usando llamadas HTTP
      • AwsQueueService: Implementa QueueService usando AWS SQS
    3. Beneficios:
      • Desacopla el dominio de los sistemas externos
      • Facilita el cambio de implementaciones sin afectar al dominio
      • Soporta testing al permitir implementaciones mock
  • Descripción: Un patrón de programación funcional para manejar operaciones que pueden fallar, proporcionando una forma estructurada de manejar errores.
  • Componentes clave:
    1. Implementación en el proyecto:
      • Either<BusinessError, T>: Representa un valor de éxito de tipo T o un error de tipo BusinessError
      • EitherAsync: Versión asíncrona de Either para manejar promesas
    2. Ejemplos de uso:
      • LocationAssignmentWorker.run(): Usa EitherAsync para manejar posibles errores en el pipeline de procesamiento
      • EventProcessor.process(): Retorna Either para indicar éxito o fallo
      • Métodos de servicio: Retornan Either para manejar posibles errores de sistemas externos
    3. Beneficios:
      • Proporciona una forma estructurada de manejar errores sin excepciones
      • Hace que el manejo de errores sea explícito en el sistema de tipos
      • Soporta composición funcional de operaciones que pueden fallar
  • Descripción: Encapsula una solicitud como un objeto, permitiendo parametrizar clientes con diferentes solicitudes y encolar o registrar solicitudes.
  • Componentes clave:
    1. Implementación en AWS SDK:
      • ReceiveMessageCommand: Encapsula una solicitud para recibir mensajes de SQS
      • DeleteMessageCommand: Encapsula una solicitud para eliminar un mensaje de SQS
    2. Uso en el proyecto:
      • AwsQueueService: Crea y envía objetos de comando al cliente SQS
    3. Beneficios:
      • Desacopla el emisor del receptor
      • Permite la parametrización de operaciones
      • Soporta logging, encolamiento y otras preocupaciones transversales