7. 5/18
observable= stream di eventi
è possibilecreare facilmentedata stream di qualsiasi cosa, nonsoloeventi
glistream sonopoco costosiintermini di risorse epossono stare ovunque
8. 6/18
Come recuperiamo i dati?
Single Multiple
Sync T GetData() IEnumerable<T> GetData()
Async Task<T> GetData() IObservable<T>GetData()
e sevogliamoprocessarein asincronouna collection
senza attendere di avere tuttiidati?
e se nonsappiamo a prioriquando dovremo farlo?
9. 7/18IEnumerable<T>
Il metodo IEnumerable.GetEnumerator()ritornaun oggettodi tipo IEnumeratorcheci permettedi iterare su una
collectionehaquesti metodieproprietà:
• bool MoveNext():avanza all’elementosuccessivoeritornatrue o false (se esiste o no)
• T Current{ get; }: ritorna l’elementocorrente
• throwsException:la chiamataaCurrent può generare eccezionesel’elementononesiste
• void Dispose() : rilascia le risorse utilizzate dall’enumerator
pull model
11. 9/18IObserver<T>
Ogni metododiIEnumeratorha il suo duale nell’interfaccia IObserver :
• void OnCompleted(): notifical’osservatore cheil provider hafinito di mandare dati
• void OnNext(T): rende disponibile un nuovo elemntoall’osservatore
• void OnError(Exception):notifical’osservatore chec’èstato un errore
pushmodel
x time
15. 13/18
Cold
• iniziaademettere item soloquandovienesottoscritta
• gliitem emessinon sono condivisitragliosservatori
Hot
• emette item indipendentementedall’esistenzadiun osservatore
• gliitem sonocondivisitratutti gliosservatori
Cold vs Hot observables
16. 14/18
ReactiveX
Rxis a library for programming with
asynchronousdata streams.
It is a combination of thebest ideas from
theObserver pattern,theIterator pattern,
and functionalprogramming
17. 15/18
mette a disposizionelaclasseObservablechein unasingolaastrazionecipermette
digestire qualsiasistream
possiamotrattare stream dieventicomenormalicollection
componibile:le queryutilizzano diversioperatorie sipossonocomporre, ilflussoè chiaro
dichiarativa:specificacosafailcodice,non comelofa
trasformativa:lequery possonotrasforamre datidaun tipoadun altro
dalpuntodivistadell’observer l’implementazionenon importa à disaccoppiamento
Quali vantaggi?
19. 17/18
Riassunto
che cosaè un’ observable
differenza tra push modelepull model
differenza tra coldehotobservables
wrappare un evento inuna observable
comeconcatenare operatori Rx per
modificare i dati