Skip to content

Architecture

Este documento describe la arquitectura implementada en el microservicio de Product Demand.

El microservicio sigue una arquitectura hexagonal (también conocida como puertos y adaptadores) con tres capas principales: domain, application e infrastructure. Esta arquitectura promueve la separación de responsabilidades, la testabilidad y la mantenibilidad.

La capa de domain es el núcleo de la aplicación y contiene la lógica de negocio. Esta capa define:

  • Entities: Objetos con identidad y ciclo de vida (ProductDemand, DemandPerDay)
  • Value Objects: Objetos inmutables que representan conceptos del dominio (Ean, Country, Warehouse)
  • Domain Services: Servicios que operan sobre múltiples entidades
  • Repositories Interfaces: Contratos para acceso a datos
  • Domain Events: Eventos que ocurren dentro del dominio
  • Business Rules: Reglas y validaciones centrales
  • demand/: Entities y lógica relacionada con la demanda de productos
  • demand/per-day/: Entities y lógica para estadísticas diarias de demanda
  • category/: Lógica de dominio para categorización de productos
  • product/: Objetos de dominio e interfaces relacionados con productos
  • methods/: Métodos de cálculo de demanda (ej. promedio)
  • valueobjects/: Value Objects como Ean, Country, Warehouse
  • observer.ts y subject.ts: Interfaces para el Observer Pattern

La capa de application orquesta el flujo de datos entre el mundo exterior y el dominio. Contiene los casos de uso de la aplicación, que representan las operaciones que el sistema puede realizar. Esta capa:

  • Coordina las entities del dominio para realizar tareas específicas
  • Implementa reglas de negocio de alto nivel
  • Gestiona transacciones y consistencia
  • Implementa el Observer Pattern para manejo de eventos
  • usecases/: Implementación de casos de uso
    • demand/: Casos de uso para demanda de productos
    • demand-per-day/: Casos de uso para estadísticas diarias de demanda
  • observers/: Implementaciones de observers
  • subjetcs/: Implementaciones de subjects para el Observer Pattern
  • calendar.ts: Funcionalidad relacionada con el calendario
  • error-handler.ts: Manejo de errores a nivel de aplicación

La capa de infrastructure proporciona implementaciones concretas de las interfaces definidas en el dominio. Esta capa:

  • Implementa el acceso a datos a través de repositories
  • Proporciona adaptadores para servicios externos
  • Maneja peticiones y respuestas HTTP
  • Implementa el envío de eventos a AWS SNS
  • Gestiona logging y métricas
  • http/: Componentes relacionados con HTTP
    • routes/: Rutas de la API
    • middlewares/: Middlewares de Express
  • repositories/: Implementaciones de repositories para MongoDB
  • services/: Implementaciones de servicios externos
    • event-dispatcher/: Implementación de despachadores de eventos
    • sns/: Servicios para interactuar con AWS SNS
  • logger/: Funcionalidad de logging
  • metrics/: Recolección de métricas