Resumen
¡Novena clase de Diseño de Sistemas en pantuflas!
En esta clase arrancamos viendo el ejercicio base de Nefli, para practicar como usar un observer, en vez de solo ser los creadores de este. Además, en anteriores clases introducimos la noción de Componentes y las interfaces que nos permiten adaptarlos. Pero en esta clase haremos mayor hincapié en la manera que estos se comunican entre sí.
Lo que vimos
- Patrones de Comunicación entre Componentes
- “Call & Return”
- “Call By Reference” (Memoria compartida)
- Excepciones
- “Continuation Passing Style” (Continuaciones)
- Eventos
- Mensajes asincrónicos
Podés ver una muy interesante comparación de todos los patrones acá.
¡Mirá! En éste repositorio tenemos ejemplos donde implementamos los patrones de comunicación.
Material utilizado
- Presentación utilizada
- Código alternativa 1
---alternativa 1
--registro el listen
reproductor.registerOnStop(new StopHandler())
RepoPelis>>pendientes()
this.pelis.filter(peli => peli.estaPendiente())
Peli>>id
Peli>>minutoActual=0
Peli>>estaPendiente()
if (this.minutoActual != 0)
return true
return false
Peli>>continuarViendo()
reproductor.play(this.id, this.minutoActual)
this.minutoActual = 0
StopHandler>>onStop(idVideo, minutoActual)
peli = RepoPelis.getInstance().findById(idVideo)
peli.minutoActual = minutoActual
-- uso
-- listar las pelis pendientes
RepoPelis.getInstance().pendientes()
-- retomar una peli sin terminar
monstersInc.continuarViendo()
- Código alternativa 2
---alternativa 2
--registro los listeneres
reproductor.registerOnStop(new StopHandler())
reproductor.registerOnFinish(new FinishHandler())
RepoPelis>>pendientes()
this.pelis.filter(peli => peli.estaPendiente())
Peli>>id
Peli>>minutoActual=0
Peli>>estaPendiente=False
Peli>>estaPendiente()
return estaPendiente
Peli>>continuarViendo()
reproductor.play(this.id, this.minutoActual)
this.estaPendiente = False
StopHandler>>onStop(idVideo, minutoActual)
peli = RepoPelis.getInstance().findById(idVideo)
peli.minutoActual = minutoActual
peli.estaPendiente = True
FinishHandler>>onFinish(idVideo)
peli = RepoPelis.getInstance().findById(idVideo)
peli.minutoActual = peli.duracion
-- uso
-- listar las pelis pendientes
RepoPelis.getInstance().pendientes()
-- retomar una peli sin terminar
monstersInc.continuarViendo()
Para la próxima clase
- Apunte reificar comportamiento
- Ejercicio manejo de proyectos: de este apunte muchas cosas ya las vieron, pero no vendría mal repasarlas, la parte nueva de la solución es un patrón que a veces es útil que es el composite pattern
- Patrón State - Libro Patrones
- Patrón Composite - Libro Patrones