Architecture
Este proyecto implementa una arquitectura hexagonal (también conocida como arquitectura de puertos y adaptadores), que separa la aplicación en capas distintas con responsabilidades claras. Esta arquitectura promueve la mantenibilidad, la testabilidad y la flexibilidad al desacoplar la lógica de negocio central de las preocupaciones externas.
Capa de Dominio
Section titled “Capa de Dominio”La capa de dominio es el núcleo de la aplicación, que contiene la lógica y las reglas de negocio independientes de cualquier sistema externo.
- Definir las entidades centrales del negocio, objetos de valor y reglas
- Establecer las interfaces de dominio (puertos) que serán implementadas por adaptadores
- Mantenerse independiente de frameworks y servicios externos
Componentes Clave
Section titled “Componentes Clave”-
Dominio de Reabastecimiento: Define las entidades centrales y reglas de negocio para operaciones de reabastecimiento
types.d.ts: Define la entidad Restocking y tipos relacionadosservice.ts: Define la interfaz RestockingService (puerto)errors.ts: Define errores específicos del dominioutils.ts: Contiene funciones de utilidad del dominio
-
Dominio de Cola: Define las abstracciones para operaciones de cola
types.d.ts: Define estructuras de mensajes y tipos de eventosservice.ts: Define la interfaz QueueService (puerto)errors.ts: Define errores relacionados con la cola
-
Manejo de Errores: Define una jerarquía de errores de negocio para un manejo consistente de errores
Capa de Aplicación
Section titled “Capa de Aplicación”La capa de aplicación orquesta el flujo de datos y coordina la ejecución de operaciones de negocio utilizando la capa de dominio.
- Implementar casos de uso coordinando objetos y servicios de dominio
- Mantenerse independiente de detalles de frameworks e infraestructura
- Proporcionar una API limpia para que la capa de infraestructura utilice
Componentes Clave
Section titled “Componentes Clave”-
Worker: El servicio principal de aplicación que procesa mensajes de la cola
RestockingSuggestionsWorker: Coordina el procesamiento de mensajes
-
Procesadores: Manejan el procesamiento de tipos específicos de eventos
RestockingSuggestionProcessor: Procesa eventos de transacciones de inventario para actualizar sugerencias de reabastecimiento
-
Verificadores: Validan y comprueban condiciones antes del procesamiento
checkProcessableEventType: Valida que un evento pueda 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, conectando la aplicación con sistemas y frameworks externos.
- Implementar adaptadores para servicios y frameworks externos
- Proporcionar implementaciones concretas de interfaces de dominio (puertos)
- Manejar preocupaciones técnicas como persistencia, mensajería y comunicación HTTP
Componentes Clave
Section titled “Componentes Clave”-
Servicios: Implementaciones concretas de interfaces de servicio de dominio
AwsQueueService: Implementa QueueService usando AWS SQSHttpRestockingService: Implementa RestockingService usando llamadas HTTPLogQueueServiceyLogRestockingService: Implementaciones decoradoras que añaden registro
-
Proveedores: Funciones de fábrica que crean y configuran instancias de servicio
getQueueService: Crea y configura una instancia de QueueServicegetRestockingSuggestionProcessor: Crea y configura una instancia de procesador
-
Validadores: Validan datos entrantes de sistemas externos
EventValidator: Valida mensajes de eventos de la cola
-
Logger: Proporciona funcionalidad de registro en toda la aplicación
-
Verificación de Salud: Monitorea e informa sobre la salud de la aplicación
HealthState: Singleton que mantiene el estado de salud de la aplicación
-
Servidor Web: Aplicación Express para endpoints de verificación de salud