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.
Patrón Observer
Section titled “Patrón Observer”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.
Implementación
Section titled “Implementación”En el microservicio, el patrón Observador se implementa mediante las siguientes interfaces y clases:
-
Interfaces base:
Observer<T>(ensrc/domain/observer.ts): Define la interfaz para los observadores con un métodoupdateque recibe datos de tipo T.Subject<T>(ensrc/domain/subject.ts): Define la interfaz para los sujetos observables con métodos parasubscribe,unsubscribeynotify.
-
Implementaciones concretas:
- En la capa de aplicación:
RestockSubject(ensrc/app/subjects/restock.ts): Implementación concreta deSubjectpara notificar sobre operaciones de reabastecimiento.- Diversos observadores en el directorio
src/app/observersque reaccionan a eventos específicos.
- En la capa de aplicación:
Uso en el Código
Section titled “Uso en el Código”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 CreateRestockprivate 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 }}Patrón Repository
Section titled “Patrón Repository”El patrón Repositorio se utiliza para abstraer el acceso a los datos y proporcionar una interfaz unificada para trabajar con entidades del dominio.
Implementación
Section titled “Implementación”- Interfaces: En la capa de dominio se definen interfaces como
RestockingRepositoryyRestockRepository. - Implementaciones: En la capa de infraestructura se proporcionan implementaciones concretas que interactúan con MongoDB.