Skip to content

Design Patterns

Este documento detalla los patrones de diseño utilizados en el microservicio Inventory Manager, explicando cómo y dónde se aplican, así como los beneficios que aportan.

El patrón Observador es un patrón de comportamiento que define una dependencia uno a muchos entre objetos, de modo que cuando un objeto cambia de estado, todos sus dependientes son notificados y actualizados automáticamente.

En Inventory Manager, el patrón Observador se implementa para notificar sobre transacciones de inventario (entradas y salidas) a otros sistemas.

Componentes clave:

  1. Interfaces en el dominio:

    • Observer<T> (src/domain/observer.ts): Define la interfaz para los observadores con un método update.
    • Subject<T> (src/domain/subject.ts): Define la interfaz para los sujetos observables con métodos subscribe, unsubscribe y notify.
  2. Implementación en la capa de aplicación:

    • TransactionSubject (src/app/subjects/transaction.ts): Implementa la interfaz Subject para notificar sobre transacciones de inventario.
    • TransactionEmitter (src/app/observers/emitters/transaction.ts): Implementa la interfaz Observer para emitir eventos de transacción.
  3. Casos de uso:

    • RegisterInput y RegisterOutput: Extienden TransactionSubject y notifican a los observadores cuando se registran entradas o salidas de inventario.
  1. Los observadores se suscriben al sujeto TransactionSubject.
  2. Cuando se registra una transacción, el caso de uso notifica al sujeto.
  3. El sujeto notifica a todos los observadores suscritos.
  4. El observador TransactionEmitter recibe la notificación y utiliza el InventoryEventDispatcher para emitir un evento a AWS SNS.

El patrón Estrategia es un patrón de comportamiento que permite definir una familia de algoritmos, encapsular cada uno de ellos y hacerlos intercambiables.

En Inventory Manager, el patrón Estrategia se utiliza para implementar diferentes algoritmos de gestión de inventario.

Componentes clave:

  1. Interfaz de estrategia:

    • InventoryStrategy (src/domain/strategies/index.ts): Define la interfaz para las estrategias de inventario con métodos get y sort.
  2. Implementaciones concretas:

    • FirstInFirstOut (src/domain/strategies/fifo.ts): Implementa la estrategia FIFO (First-In-First-Out).
    • FirstExpiresFirstOut (src/domain/strategies/fefo.ts): Implementa la estrategia FEFO (First-Expires-First-Out).
  3. Fábrica de estrategias:

    • strategiesBuilder (src/domain/strategies/builder.ts): Proporciona una forma de crear estrategias basadas en un tipo.

El patrón Repositorio es un patrón que separa la lógica que recupera los datos y los mapea a un modelo de entidad de la lógica de negocio que actúa sobre el modelo.

En Inventory Manager, el patrón Repositorio se utiliza para acceder a los datos de las entidades.

Componentes clave:

  1. Interfaces en el dominio:

    • EntryRepository (src/domain/entry/repository.ts): Define la interfaz para el repositorio de entradas.
  2. Implementaciones en la infraestructura:

    • Implementaciones concretas en src/infrastructure/repositories/ que utilizan MongoDB.