Design Patterns
Este documento detalla los patrones de diseño utilizados en el worker para procesar reportes de mermas de inventario y enviarlos a SAP.
Adapter Pattern
Section titled “Adapter Pattern”-
Descripción: El patrón Adapter convierte la interfaz de una clase en otra interfaz que los clientes esperan. Permite que clases trabajen juntas que de otra manera no podrían debido a interfaces incompatibles.
-
Componentes clave:
- Interfaces del dominio:
QueueService(src/domain/queue/service.ts): Define la interfaz para operaciones de colaSapDocumentsService(src/domain/sap-documents/service.ts): Define la interfaz para operaciones de documentos SAP
- Implementaciones en infraestructura:
AwsQueueService(src/infrastructure/services/queue/index.ts): Adapta AWS SQS a la interfaz QueueServiceHttpSapDocumentsService(src/infrastructure/services/sap-documents/client.ts): Adapta llamadas HTTP a la interfaz SapDocumentsService
- Casos de uso:
- La capa de aplicación usa las interfaces del dominio sin conocer las implementaciones concretas
- Interfaces del dominio:
Dependency Injection Pattern
Section titled “Dependency Injection Pattern”-
Descripción: Dependency Injection es una técnica donde un objeto recibe otros objetos de los que depende. Estos otros objetos se llaman dependencias.
-
Componentes clave:
- Proveedores de servicios:
src/infrastructure/providers/services.ts: Crea y proporciona instancias de serviciossrc/infrastructure/providers/processors.ts: Crea y proporciona instancias de procesadores
- Inyección por constructor:
- El constructor de
SapWorkerrecibeQueueServiceySapProcessor - El constructor de
SapProcessorrecibeSapDocumentsService - El constructor de
HttpSapDocumentsServicerecibe parámetros de configuración
- El constructor de
- Casos de uso:
- Facilita las pruebas al permitir implementaciones simuladas
- Desacopla componentes, haciendo el sistema más modular
- Proveedores de servicios:
Functional Error Handling (Either Monad)
Section titled “Functional Error Handling (Either Monad)”-
Descripción: El Either monad es un patrón de programación funcional para manejar errores sin excepciones. Representa un valor que puede ser un éxito (Right) o un fracaso (Left).
-
Componentes clave:
- Implementación de Either:
- El paquete
@justomx/eitherproporciona los tiposEitheryEitherAsync
- El paquete
- Uso en el dominio:
- Las interfaces de servicio devuelven
Either<BusinessError, T> - Los errores de negocio se definen en
src/domain/errors.ts
- Las interfaces de servicio devuelven
- Casos de uso:
SapWorker.run(): Encadena operaciones conflatMapy maneja errores confoldSapProcessor.process(): Encadena validaciones y transformaciones conflatMaptransformToItem(): Devuelve un error o un item transformado
- Implementación de Either:
Factory Method Pattern
Section titled “Factory Method Pattern”-
Descripción: El patrón Factory Method define una interfaz para crear un objeto, pero permite a las subclases decidir qué clase instanciar.
-
Componentes clave:
- Funciones factory:
getCollectorWorker()ensrc/infrastructure/providers/processors.ts: Crea una instancia de workergetLogger()ensrc/infrastructure/logger/index.ts: Crea una instancia de logger
- Casos de uso:
- Centraliza la creación de objetos
- Oculta detalles de implementación a los clientes
- Funciones factory:
Singleton Pattern
Section titled “Singleton Pattern”-
Descripción: El patrón Singleton asegura que una clase tenga solo una instancia y proporciona un punto de acceso global a ella.
-
Componentes clave:
- Implementaciones de Singleton:
HealthState.getInstance()ensrc/infrastructure/healthcheck/health-state.ts: Proporciona una única instancia del estado de saludAsyncJustoContextStorage.getInstance()en el archivo principal: Proporciona una única instancia del almacenamiento de contexto
- Casos de uso:
- Asegura que solo exista una instancia del estado de salud
- Proporciona un punto de acceso global al estado de salud
- Implementaciones de Singleton: