Skip to content

Design Patterns

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

El patrón Observador es uno de los principales patrones de diseño implementados en este microservicio. Este patrón 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 el microservicio, el patrón Observador se implementa mediante las siguientes interfaces y clases:

  1. Interfaces base:

    • Observer<T> (en src/domain/observer.ts): Define la interfaz para los observadores con un método update que recibe datos de tipo T.
    • Subject<T> (en src/domain/subject.ts): Define la interfaz para los sujetos observables con métodos para subscribe, unsubscribe y notify.
  2. Implementaciones concretas:

    • En la capa de aplicación:
      • RestockSubject (en src/app/subjects/restock.ts): Implementación concreta de Subject para notificar sobre operaciones de reabastecimiento.
      • Diversos observadores en el directorio src/app/observers que reaccionan a eventos específicos.

El patrón Observador se utiliza principalmente en los casos de uso para notificar a otros componentes del sistema cuando ocurren eventos importantes. Por ejemplo, en la clase CreateRestock:

// En el método saveAndNotify de CreateRestock
private async saveAndNotify(restock: Restock): Promise<Either<BusinessError, Restock>> {
try {
await this.repository.save(restock)
this.notify(restock) // Notifica a todos los observadores suscritos
return Either.right(restock)
} catch (err) {
// Manejo de errores
}
}

El patrón Repositorio se utiliza para abstraer el acceso a los datos y proporcionar una interfaz unificada para trabajar con entidades del dominio.

  • Interfaces: En la capa de dominio se definen interfaces como RestockingRepository y RestockRepository.
  • Implementaciones: En la capa de infraestructura se proporcionan implementaciones concretas que interactúan con MongoDB.