Architecture
Architecture
Section titled “Architecture”Este documento describe la arquitectura implementada en el microservicio Storage Manager.
Arquitectura
Section titled “Arquitectura”El Storage Manager sigue una arquitectura hexagonal (también conocida como arquitectura de puertos y adaptadores), que está organizada en tres capas principales: Domain, Application e Infrastructure. Esta arquitectura promueve la separación de responsabilidades, la testabilidad y la mantenibilidad.
Capa de Domain
Section titled “Capa de Domain”La capa de Domain es el núcleo de la aplicación y contiene la lógica de negocio. Esta capa define:
- Entities: Objetos que tienen una identidad y un ciclo de vida (Container, Location, Storage, Product)
- ValueObjects: Objetos inmutables que representan conceptos del dominio (Country, Warehouse, ContainerName)
- Repositories: Interfaces que definen cómo acceder y persistir entidades
- Services: Interfaces que definen operaciones del dominio
- Errors: Tipos de errores específicos del dominio
Componentes Principales
Section titled “Componentes Principales”container/: Entidades y lógica relacionada con contenedoresinventory/: Entidades y lógica relacionada con inventariolocation/: Entidades y lógica relacionada con ubicacionesproduct/: Entidades y lógica relacionada con productosrestocking/: Entidades y lógica relacionada con reabastecimientostorage/: Entidades y lógica relacionada con operaciones de almacenamientouser/: Entidades y lógica relacionada con usuariosvalueobjects/: ValueObjects utilizados en todo el dominioutils/: Funciones de utilidad para operaciones del dominioerrors.ts: Definiciones de errores del dominio
Capa de Application
Section titled “Capa de Application”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 entidades del dominio para realizar tareas específicas
- Implementa reglas de negocio que involucran múltiples entidades del dominio
- Maneja límites de transacciones
- Gestiona el manejo de errores y el registro de logs
Componentes Principales
Section titled “Componentes Principales”usecases/: Implementaciones de los casos de usocontainers/: Casos de uso para operaciones de contenedoresstore.ts: Almacenar un contenedor en una ubicación de almacenamientostore-partial.ts: Almacenar un contenedor parcialmentesuggestions.ts: Obtener sugerencias para almacenamiento de contenedoresfilter.ts: Filtrar contenedores basados en criterios
container-pre-storage.ts: Manejar contenedores en estado de pre-almacenamientocalendar.ts: Funcionalidad relacionada con el calendarioerror-handler.ts: Lógica común de manejo de errores
Capa de Infrastructure
Section titled “Capa de Infrastructure”La capa de Infrastructure proporciona implementaciones concretas de las interfaces definidas en la capa de dominio. Esta capa:
- Implementa el acceso a datos usando MongoDB
- Proporciona controladores HTTP y rutas para la API
- Implementa clientes de servicios externos
- Maneja preocupaciones transversales como logging y métricas
Componentes Principales
Section titled “Componentes Principales”http/: Componentes relacionados con HTTPcontrollers/: Controladores de la APImiddlewares/: Middlewares de Expressroutes/: Rutas de la APIserver.ts: Configuración del servidor Express
repositories/: Implementaciones de repositories del dominiostorage/: Implementación del repository de almacenamiento
services/: Implementaciones de services del dominiohttp-client/: Clientes HTTP para servicios externosmetrics/: Servicio de recolección de métricascalendar.ts: Implementación del servicio de calendarioid-generator.ts: Servicio de generación de IDs
providers/: Funciones factory para crear servicios y repositoriesmongodb.ts: Proveedor de conexión a MongoDBservices.ts: Proveedores de serviciosrepositories.ts: Proveedores de repositoriesusecases.ts: Proveedores de casos de uso
context/: Gestión del contexto de la aplicaciónlogger/: Configuración de loggingvalidators/: Validación de entrada
Flujo de Datos
Section titled “Flujo de Datos”- Las peticiones HTTP son recibidas por el servidor Express
- Las peticiones son enrutadas al controlador apropiado
- Los controladores validan la entrada y llaman al caso de uso apropiado
- Los casos de uso orquestan entidades y servicios del dominio para realizar la operación
- Las entidades y servicios del dominio implementan la lógica de negocio
- Los repositories persisten los cambios en la base de datos
- Los controladores formatean la respuesta y la envían de vuelta al cliente
Esta arquitectura asegura que la lógica de negocio esté aislada de preocupaciones externas, haciendo que sea más fácil probar, mantener y evolucionar la aplicación a lo largo del tiempo.