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:
- Capa de dominio:
- Interfaz
QueueService: Define el puerto para operaciones de cola - Interfaz
RestockingService: Define el puerto para operaciones de reabastecimiento
- Interfaz
- Capa de infraestructura:
AwsQueueService: Adaptador que implementa la interfaz QueueServiceHttpRestockingService: Adaptador que implementa la interfaz RestockingService
- Casos de uso:
AutoRestockWorker,AutoRestockProcessor: Utilizan los puertos sin conocer los detalles de implementación
- Capa de dominio:
Singleton Pattern
Section titled “Singleton Pattern”-
Descripción: Asegura que una clase tenga solo una instancia y proporciona un punto de acceso global a ella.
-
Componentes clave:
- Implementación en proveedores:
getSQSClient(): Asegura que solo se cree un cliente SQSgetQueueService(): Asegura que solo se cree un QueueServicegetRestockingService(): Asegura que solo se cree un RestockingServicegetWorker(): Asegura que solo se cree un Worker
- Casos de uso:
- Acceso consistente a servicios en toda la aplicación
- Optimización de recursos mediante la reutilización de instancias
- Implementación en proveedores:
Factory Pattern
Section titled “Factory Pattern”-
Descripción: Crea objetos sin exponer la lógica de instanciación al cliente.
-
Componentes clave:
- Implementación en proveedores:
getSQSClient(): Fábrica para crear clientes SQSgetQueueService(): Fábrica para crear instancias de QueueServicegetRestockingService(): Fábrica para crear instancias de RestockingServicegetWorker(): Fábrica para crear instancias de Worker
- Casos de uso:
- Creación centralizada de objetos complejos
- Desacoplamiento de la creación de objetos de su uso
- Implementación en proveedores:
Either Monad Pattern
Section titled “Either Monad Pattern”-
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:
- Implementación en todo el código:
Either<BusinessError, T>: Representa un error o un resultado exitosoEitherAsync: Versión asíncrona de Either
- Casos de uso:
- Manejo de errores en
AutoRestockProcessor.process() - Manejo de errores en
AutoRestockWorker.run() - Manejo de errores en implementaciones de servicios
- Manejo de errores en
- Implementación en todo el código: