Design Patterns
Este documento detalla los patrones de diseño utilizados en el microservicio de Product Demand.
Observer Pattern
Section titled “Observer Pattern”El Observer Pattern es un patrón de diseño 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 el microservicio de Product Demand, el Observer Pattern se implementa para notificar sobre eventos de demanda de productos y desencadenar acciones subsecuentes como cálculos de demanda diaria y categorización.
Componentes clave:
-
Interfaces en el domain:
Observer<T>(src/domain/observer.ts): Define la interfaz para los observers con un métodoupdate.Subject<T>(src/domain/subject.ts): Define la interfaz para los subjects observables con métodossubscribe,unsubscribeynotify.
-
Implementación en la capa de application:
DemandSubject(src/app/subjetcs/demand.ts): Implementa la interfazSubjectpara notificaciones de demanda de productos.CategorizationSubject(src/app/subjetcs/categorization.ts): Implementa la interfazSubjectpara eventos de categorización.CreateDemandPerDayObserver(src/app/observers/create-demand-per-day.ts): Implementa la interfazObserverpara crear registros de demanda diaria cuando cambia la demanda.
-
Casos de uso:
CreateProductDemand: ExtiendeDemandSubjecty notifica a los observers cuando se registra una nueva demanda de producto.Categorize: ExtiendeCategorizationSubjecty notifica a los observers cuando los productos son categorizados.
- Los observers se suscriben a los subjects durante la inicialización de la aplicación.
- Cuando se crea o actualiza una demanda de producto, el caso de uso notifica a todos los observers suscritos.
- El
CreateDemandPerDayObserverrecibe la notificación e invoca el caso de usoCreateDemandPerDay. - Cuando ocurre la categorización, el caso de uso
Categorizenotifica a los observers, que pueden desencadenar eventos a sistemas externos a través de SNS.
Either Pattern
Section titled “Either Pattern”El Either Pattern es un patrón de programación funcional utilizado para el manejo de errores y para representar cálculos que podrían fallar.
Implementación
Section titled “Implementación”El microservicio de Product Demand utiliza el Either Pattern extensivamente para el manejo de errores y para hacer más explícito el flujo de operaciones.
Componentes clave:
-
Tipo Either:
- Proporcionado por el paquete
@justomx/either - Representa un valor de uno de dos tipos posibles (una unión disjunta)
- Generalmente usado como
Either<Error, SuccessValue>
- Proporcionado por el paquete
-
Implementación en casos de uso:
- Los casos de uso devuelven
Either<BusinessError, SuccessValue>para representar éxito o fracaso EitherAsyncse utiliza para operaciones asíncronas
- Los casos de uso devuelven
-
Ejemplos de uso:
- Las operaciones de repository devuelven tipos Either
- Los casos de uso encadenan operaciones usando
map,flatMapy otras operaciones monádicas - Manejo de errores con
onLefty manejo de éxito cononRight
Beneficios
Section titled “Beneficios”- Manejo explícito de errores sin excepciones
- Composición de operaciones con fallos potenciales
- Seguridad de tipos para casos de error
- Flujo de código más limpio y predecible