Skip to content

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.

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.

  • Entidades: Objetos de negocio principales

    • RestockingEvent: Representa un evento de reabastecimiento
    • Product: Representa un producto
    • ProductDemand: 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 mensajes
    • ProductService: Interfaz para recuperar información de productos
    • DemandService: Interfaz para recuperar información de demanda
    • RestockingEventDispatcher: Interfaz para enviar eventos
  • Errores de Negocio: Tipos de error específicos del dominio

    • BusinessError: Clase base de error
    • InvalidEventFormatError: Error para formatos de evento inválidos
    • ProductNotFoundError: Error cuando no se encuentra un producto
    • LocationNotFoundError: Error cuando no se encuentra una ubicació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.

  • 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 reabastecimiento
    • RestockDataEventProcessor: 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

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.

  • Servicios: Implementaciones de interfaces de servicio de dominio

    • AwsQueueService: Implementa QueueService usando AWS SQS
    • HttpProductService: Implementa ProductService usando peticiones HTTP
    • HttpDemandService: 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 QueueService
    • getWorker: 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