Skip to content

Design Patterns

Este documento detalla los patrones de diseño utilizados en el microservicio op-inventory-gateway.

El patrón Adapter convierte la interfaz de una clase en otra interfaz que los clientes esperan. Permite que las clases trabajen juntas cuando de otra manera no podrían debido a interfaces incompatibles.

En op-inventory-gateway, el patrón Adapter se utiliza para proporcionar una interfaz unificada a diferentes sistemas de gestión de inventario.

Componentes clave:

  1. Interfaces de servicio en la capa de dominio:

    • InventoryService (src/domain/inventory/service.ts): Define una interfaz común para operaciones de inventario
    • InventoryItemService (src/domain/inventory-item/service.ts): Define una interfaz común para operaciones de elementos de inventario
  2. Implementaciones concretas en la capa de infraestructura:

    • HttpInventoryManagerService (src/infrastructure/service/inventory/index.ts): Adapta el microservicio Inventory Manager a la interfaz InventoryService
    • HttpBodegaoInventoryItemService (src/infrastructure/service/inventory-item/index.ts): Adapta el servicio Bodegao Inventory Item a la interfaz InventoryItemService
  3. Casos de uso:

    • El processTransactionMiddleware utiliza estos adaptadores para enrutar peticiones al sistema backend apropiado
  • Permite al microservicio interactuar con diferentes sistemas backend a través de una interfaz unificada
  • Facilita la migración gradual de sistemas legacy a microservicios
  • Aísla el código cliente de los detalles de implementación de los sistemas backend

El patrón Facade proporciona una interfaz simplificada a un subsistema complejo. No encapsula el subsistema, sino que proporciona una interfaz simplificada para él.

El op-inventory-gateway actúa como una fachada para los sistemas de gestión de inventario, proporcionando una API unificada para los clientes.

Componentes clave:

  1. Servidor Express y middleware:

    • server.ts (src/infrastructure/http/server.ts): Configura el servidor Express y los middleware
    • processTransactionMiddleware (src/infrastructure/http/middlewares/proccess-transaction.ts): Enruta peticiones al servicio apropiado
  2. Wrapper de servicio:

    • WrapperInventoryItemService (src/infrastructure/service/inventory-item/wrapper.ts): Proporciona una interfaz unificada a servicios de elementos de inventario específicos por país
  3. Casos de uso:

    • Todas las peticiones HTTP son manejadas por la fachada, que las enruta al sistema backend apropiado
  • Simplifica la interfaz del cliente a los complejos sistemas de gestión de inventario
  • Centraliza la lógica de enrutamiento en un solo lugar
  • Proporciona un único punto de entrada para todas las operaciones de inventario
  • Permite cambiar transparentemente entre sistemas backend basados en la configuración

El patrón Factory Method define una interfaz para crear un objeto, pero deja que las subclases decidan qué clase instanciar. Permite que una clase difiera la instanciación a las subclases.

En op-inventory-gateway, los métodos factory se utilizan para crear instancias de servicios.

Componentes clave:

  1. Métodos factory:

    • getInventoryService y getInventoryItemService (src/infrastructure/providers/services.ts): Métodos factory para crear instancias de servicios
    • WrapperInventoryItemService.build() (src/infrastructure/service/inventory-item/wrapper.ts): Método factory estático para crear un servicio wrapper
  2. Casos de uso:

    • El processTransactionMiddleware utiliza estos métodos factory para obtener instancias de servicios
  • Centraliza la lógica de creación de servicios
  • Permite una fácil configuración e inyección de dependencias
  • Simplifica las pruebas al permitir la inyección de servicios mock