Architecture
Este proyecto implementa una arquitectura hexagonal (también conocida como arquitectura de puertos y adaptadores), que separa la aplicación en tres capas principales: dominio, aplicación e infraestructura. Esta arquitectura promueve la separación de responsabilidades, la facilidad de pruebas y el mantenimiento.
Capa de Dominio
Section titled “Capa de Dominio”La capa de dominio es el núcleo de la aplicación, contiene la lógica de negocio, entidades y reglas de negocio. Es independiente de cualquier framework o tecnología externa y define las interfaces (puertos) que la aplicación necesita para interactuar con sistemas externos.
Componentes Clave
Section titled “Componentes Clave”-
Entidades: Objetos de negocio principales
RestockingEvent: Representa un evento de reabastecimientoProduct: Representa un productoProductDemand: Representa información de demanda de producto
-
Objetos de Valor: Objetos inmutables que representan conceptos en el dominio
ReceiptHandle: Representa un identificador de recibo para mensajes SQS
-
Interfaces (Puertos): Definen cómo la aplicación interactúa con sistemas externos
QueueService: Interfaz para interactuar con colas de mensajesProductService: Interfaz para recuperar información de productosDemandService: Interfaz para recuperar información de demandaRestockingEventDispatcher: Interfaz para enviar eventos
-
Errores de Negocio: Tipos de error específicos del dominio
BusinessError: Clase base de errorInvalidEventFormatError: Error para formatos de evento inválidosProductNotFoundError: Error cuando no se encuentra un productoLocationNotFoundError: Error cuando no se encuentra una ubicación
Capa de Aplicación
Section titled “Capa de Aplicación”La capa de aplicación orquesta el flujo de datos entre la capa de dominio y la capa de infraestructura. Contiene casos de uso, servicios de aplicación y orquesta objetos de dominio para realizar tareas específicas.
Componentes Clave
Section titled “Componentes Clave”-
Workers: Coordinan el procesamiento de eventos
RestockingDataEventWorker: Worker principal que procesa eventos de reabastecimiento
-
Procesadores: Procesan tipos específicos de eventos
RestockingDataEventProcessor: Procesa eventos de reabastecimientoRestockDataEventProcessor: Procesa eventos de reposición
-
Transformadores: Transforman datos entre diferentes formatos
transformToEvent: Transforma datos brutos en eventos de dominio
-
Verificadores: Validan reglas de negocio
checkWarehouseProcessable: Verifica si un almacén puede ser procesado
Capa de Infraestructura
Section titled “Capa de Infraestructura”La capa de infraestructura proporciona implementaciones concretas de las interfaces definidas en la capa de dominio. Contiene adaptadores para servicios externos, repositorios y otras preocupaciones de infraestructura.
Componentes Clave
Section titled “Componentes Clave”-
Servicios: Implementaciones de interfaces de servicio de dominio
AwsQueueService: Implementa QueueService usando AWS SQSHttpProductService: Implementa ProductService usando peticiones HTTPHttpDemandService: Implementa DemandService usando peticiones HTTP
-
Despachadores de Eventos: Envían eventos a sistemas externos
SnsRestockingEventDispatcher: Implementa RestockingEventDispatcher usando AWS SNS
-
Configuración: Configuración de la aplicación
appConfig: Contiene toda la configuración de la aplicación
-
Proveedores: Métodos de fábrica para crear instancias de servicios
getQueueService: Crea y devuelve una instancia de QueueServicegetWorker: Crea y devuelve una instancia de Worker
-
Verificaciones de Salud: Monitorean la salud de la aplicación
HealthState: Rastrea la salud de la aplicación
-
Registro: Registro de la aplicación
getLogger: Crea y devuelve una instancia de logger