Skip to content

Design Patterns

Este documento detalla los patrones de diseño utilizados en el worker op-restocking-evaluator.

Arquitectura Hexagonal (Puertos y Adaptadores)

Section titled “Arquitectura Hexagonal (Puertos y Adaptadores)”
  • 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 eventuales dispositivos y bases de datos en tiempo de ejecución.
  • Componentes clave:
    1. Capa de dominio:
      • Archivos service.ts: Definen interfaces (puertos) para servicios externos
      • Archivos errors.ts: Definen errores específicos del dominio
    2. Implementación en la capa de infraestructura:
      • Directorio services/: Contiene implementaciones de adaptadores para servicios externos
      • Cada servicio implementa una interfaz de dominio, p.ej., HttpRestockingService implements RestockingService
    3. Casos de uso:
      • processor.ts: Utiliza interfaces de dominio sin conocer detalles de implementación
  • Descripción: Una técnica mediante la cual un objeto suministra las dependencias de otro objeto.
  • Componentes clave:
    1. Interfaces de servicio:
      • La capa de dominio define interfaces de servicio
    2. Implementación:
      • infrastructure/providers/services.ts: Crea y proporciona instancias de servicios
      • Inyección por constructor en RestockingEvaluatorProcessor y RestockingEvaluatorWorker
    3. Casos de uso:
      • Permite un acoplamiento flexible entre componentes
      • Facilita las pruebas al permitir implementaciones simuladas

Manejo Funcional de Errores (Mónada Either)

Section titled “Manejo Funcional de Errores (Mónada Either)”
  • Descripción: Un patrón para manejar errores de manera funcional, evitando excepciones y proporcionando seguridad de tipos.
  • Componentes clave:
    1. Tipo Either:
      • El paquete @justomx/either proporciona los tipos Either y EitherAsync
      • Representa un valor de uno de dos tipos posibles (una unión disjunta)
    2. Implementación:
      • Los métodos de servicio devuelven Either<BusinessError, T> para representar éxito o fracaso
      • EitherAsync para operaciones asíncronas con manejo de errores
    3. Casos de uso:
      • processor.ts: Utiliza flatMap para encadenar operaciones que podrían fallar
      • worker.ts: Utiliza fold para manejar casos de éxito y fracaso
  • Descripción: Permite que objetos con interfaces incompatibles colaboren.
  • Componentes clave:
    1. Interfaces de dominio:
      • RestockingService, InventoryService, etc.
    2. Implementación:
      • HttpRestockingService, HttpInventoryService, etc.
      • Adapta llamadas a API HTTP a interfaces de dominio
    3. Casos de uso:
      • Permite que la capa de dominio defina sus propias interfaces
      • Facilita el reemplazo de implementaciones de servicios externos