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.
Patrón Observer
Section titled “Patrón Observer”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.
Implementación
Section titled “Implementación”En Inventory Manager, el patrón Observador se implementa para notificar sobre transacciones de inventario (entradas y salidas) a otros sistemas.
Componentes clave:
-
Interfaces en el dominio:
Observer<T>(src/domain/observer.ts): Define la interfaz para los observadores con un métodoupdate.Subject<T>(src/domain/subject.ts): Define la interfaz para los sujetos observables con métodossubscribe,unsubscribeynotify.
-
Implementación en la capa de aplicación:
TransactionSubject(src/app/subjects/transaction.ts): Implementa la interfazSubjectpara notificar sobre transacciones de inventario.TransactionEmitter(src/app/observers/emitters/transaction.ts): Implementa la interfazObserverpara emitir eventos de transacción.
-
Casos de uso:
RegisterInputyRegisterOutput: ExtiendenTransactionSubjecty notifican a los observadores cuando se registran entradas o salidas de inventario.
Flujo de funcionamiento
Section titled “Flujo de funcionamiento”- Los observadores se suscriben al sujeto
TransactionSubject. - Cuando se registra una transacción, el caso de uso notifica al sujeto.
- El sujeto notifica a todos los observadores suscritos.
- El observador
TransactionEmitterrecibe la notificación y utiliza elInventoryEventDispatcherpara emitir un evento a AWS SNS.
Patrón Strategy
Section titled “Patrón Strategy”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.
Implementación
Section titled “Implementación”En Inventory Manager, el patrón Estrategia se utiliza para implementar diferentes algoritmos de gestión de inventario.
Componentes clave:
-
Interfaz de estrategia:
InventoryStrategy(src/domain/strategies/index.ts): Define la interfaz para las estrategias de inventario con métodosgetysort.
-
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).
-
Fábrica de estrategias:
strategiesBuilder(src/domain/strategies/builder.ts): Proporciona una forma de crear estrategias basadas en un tipo.
Patrón Repository
Section titled “Patrón Repository”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.
Implementación
Section titled “Implementación”En Inventory Manager, el patrón Repositorio se utiliza para acceder a los datos de las entidades.
Componentes clave:
-
Interfaces en el dominio:
EntryRepository(src/domain/entry/repository.ts): Define la interfaz para el repositorio de entradas.
-
Implementaciones en la infraestructura:
- Implementaciones concretas en
src/infrastructure/repositories/que utilizan MongoDB.
- Implementaciones concretas en