JavaScript de Cero a Experto / Patrones y observables
Reto: Mi Bolsillo reactivo
El examen de arquitecto: montar una mini-arquitectura donde la factory fabrica, el bus comunica y las suscripciones mantienen todo sincronizado — en tres módulos ESM separados, sin DOM y sin framework. Es la maqueta a escala de cómo se organizan las apps grandes; cuando veas RxJS o Zustand, vas a reconocer cada pieza.
Reto
Mi Bolsillo reactivo
Qué debes construir
Tres archivos (bus.js, bolsillo.js, index.js) que al correr
producen EXACTAMENTE esto:
[total] $ 18.000
[total] $ 43.000
[alerta] Gasto fuerte: Cine ($ 25.000)
— alerta desuscrita —
[total] $ 135.000
Rechazado: El valor debe ser positivo
[total final] $ 135.000
Requisitos:
bus.jsexporta tucrearBus()de la lección 4:Mapde tema → lista,publicar(tema, datos), ysuscribir(tema, reaccion)que DEVUELVE el comprobante de desuscripción.bolsillo.jsexporta la factorycrearBolsillo(bus): movimientos PRIVADOS por closure, gettertotal(conreduce), yagregar(nombre, valor)que valida (valor > 0othrow), guarda, y PUBLICA en el bus el tema"gasto"con{ nombre, valor, total }— el total ya calculado viaja en el aviso.index.jsarma la app: crea el bus, crea el bolsillo (inyectándole el bus — nota el diseño: el bolsillo no crea su bus, lo RECIBE), y suscribe DOS observadores al tema "gasto":[total](imprime el total formateado conIntles-CO) y[alerta](solo sivalor > 20000, guardando su comprobante).- El guion: agrega Almuerzo 18000 y Cine 25000; desuscribe la alerta
e imprime la línea de despedida; agrega Mercado 92000 (total avisa,
alerta calla); intenta agregar
("Fantasma", -50)atrapando el error; cierra leyendobolsillo.totaldirecto. - El formateador
Intlse crea UNA vez enindex.js.
Reglas
- Tres archivos con
import/export— nada de todo-en-uno. - El bolsillo NO conoce a sus observadores (solo publica); los observadores NO conocen al bolsillo (solo escuchan el bus).
- Movimientos privados de verdad: por closure, sin exponer el array.
- Cero variables globales compartidas entre módulos que no sean los imports.
30:00
Cuando estés listo, arranca el reloj.
Qué sigue
Módulo 13 cerrado: piensas en patrones. El módulo 14 te devuelve al navegador con su caja de APIs modernas — y abre con la que "Mi Bolsillo" lleva pidiendo desde el módulo 8: localStorage, para que los datos POR FIN sobrevivan a la recarga. Además: observers del DOM, hilos aparte con Web Workers, portapapeles, ubicación y el cuaderno de rutas de las SPAs.