Design Patterns
Este documento detalla los patrones de diseño utilizados en el microservicio Operations Reporting.
Patrón Singleton
Section titled “Patrón Singleton”- Descripción: El patrón Singleton asegura que una clase tenga una única instancia y proporciona un punto de acceso global a ella. Esto es particularmente útil para gestionar recursos compartidos como conexiones a bases de datos.
- Componentes clave:
- Implementación en repositories:
DocumentDBInventoryRepository: Utiliza una instancia estática y el método getInstance() para asegurar que solo exista una instanciaDocumentDBInventoryWasteRepository: Implementación similar con gestión de instancia estática
- Beneficios:
- Asegura que una única conexión a la base de datos sea compartida en toda la aplicación
- Reduce el consumo de recursos
- Proporciona un punto de acceso consistente al repository
- Casos de uso:
- Gestión de conexiones a bases de datos
- Acceso a repositories en toda la aplicación
- Implementación en repositories:
Patrón Repository
Section titled “Patrón Repository”- Descripción: El patrón Repository media entre el dominio y las capas de mapeo de datos, actuando como una colección en memoria de objetos del dominio.
- Componentes clave:
- Interfaces en el domain:
InventoryRepository: Define métodos para acceder a datos de inventarioInventoryWasteRepository: Define métodos para acceder a datos de desperdicios de inventario
- Implementación en la capa de infrastructure:
DocumentDBInventoryRepository: Implementa la interfaz del repository de inventario usando MongoDBDocumentDBInventoryWasteRepository: Implementa la interfaz del repository de desperdicios de inventario usando MongoDB
- Casos de uso:
- Abstracción de la lógica de acceso a datos de la lógica de negocio
- Habilitación de pruebas mediante inyección de dependencias
- Proporcionar una interfaz consistente para operaciones de datos
- Interfaces en el domain:
Patrón Adapter
Section titled “Patrón Adapter”- Descripción: El patrón Adapter convierte la interfaz de una clase en otra interfaz que los clientes esperan, permitiendo que clases trabajen juntas que de otro modo no podrían debido a interfaces incompatibles.
- Componentes clave:
- Adaptadores de servicios externos:
HttpProductService: Adapta el servicio externo de productos a la interfaz internaProductServiceHttpLocationService: Adapta el servicio externo de ubicaciones a la interfaz internaLocationService
- Detalles de implementación:
- Utiliza clientes HTTP para comunicarse con servicios externos
- Transforma formatos de datos externos a objetos del dominio
- Casos de uso:
- Integración con servicios externos
- Desacoplamiento del dominio de dependencias externas
- Adaptadores de servicios externos:
Arquitectura Hexagonal (Puertos y Adaptadores)
Section titled “Arquitectura Hexagonal (Puertos y Adaptadores)”- Descripción: Aunque no es un patrón de diseño tradicional, la arquitectura hexagonal es un patrón arquitectónico que permite que una aplicación sea igualmente dirigida por usuarios, programas, pruebas automatizadas o scripts por lotes, y que se desarrolle y pruebe de forma aislada de sus eventuales dispositivos y bases de datos en tiempo de ejecución.
- Componentes clave:
- Puertos (interfaces en la capa de domain):
- Interfaces de Repository
- Interfaces de Service
- Adaptadores (implementaciones en la capa de infrastructure):
- Implementaciones de Repository
- Controllers HTTP
- Clientes de servicios externos
- Casos de uso:
- Separación de responsabilidades
- Facilidad de pruebas
- Flexibilidad para cambiar componentes de infraestructura
- Puertos (interfaces en la capa de domain):