Come dovrei strutturare i miei Observables su un'applicazione Nodejs con RxJS

1

Quindi sto imparando la programmazione reattiva e sto costruendo un'app per il divertimento che ascolta i vari ticker di informazioni sulle azioni e calcola cose specifiche da mostrare nei grafici ecc.

Quindi adesso ho informazioni provenienti da fonti diverse, ognuna delle quali è osservabile da un RxJS (flusso di pensiero), quindi il mio osservatore "ticker $" è un combineLatest di tutti i diversi.

Poi calcolo cose diverse sulla base degli array che emette il ticker$ osservabile, e in definitiva faccio un mergeAll() sul risultato dei calcoli osservabile, quindi da quel punto in poi ho un osservatore appiattito con informazioni utili nel tempo.

La mia domanda riguarda il mantenimento dello stato, l'esecuzione di effetti collaterali, cose del genere. Se voglio continuare a concatenare gli osservabili in questo modo, finisco per aggiungere agli input delle cose osservabili che calcolo e quindi produrre un nuovo output contenente informazioni nuove e vecchie, una sorta di programmazione orientata alle ferrovie, poiché se mappassi solo i valori e produrre un nuovo output modificato Finisco per perdere informazioni e gli operatori successivi, ad esempio, non possono disconnettere i dati precedenti.

C'è anche il problema del mantenimento dello stato, diciamo che uso scan per mantenere qualche stato ma poi quello stato è necessario in un'altra parte dell'app, quale sarebbe un buon modo per gestirlo?

    
posta Alfonso Pérez 30.11.2017 - 19:36
fonte

1 risposta

1

Idealmente, le tubature dovrebbero essere mantenute prive di effetti collaterali. So che questo non è sempre fattibile, nel qual caso ho alcune raccomandazioni (che sono sicuro potrebbero essere estese):

  • Evita gli effetti collaterali, se possibile

    Lo so, l'ho già detto. Ma vale la pena ripeterlo.

  • Applica gli effetti indesiderati

    Rx ha la funzione do per questo. (Vedi ad esempio qui ). Seguendo questa pratica standard, almeno è facile vedere, osservando la pipeline, che c'è un effetto collaterale che deve essere preso in considerazione.

  • Mantieni focalizzati gli effetti collaterali

    Non eseguire più effetti collaterali non correlati contemporaneamente. Questo non è specifico per la programmazione reattiva, ovviamente, ma è particolarmente importante qui. La preoccupazione principale qui è rendere l'effetto collaterale molto facile da capire. Inoltre, potresti essere in grado di riutilizzare la stessa funzione in più punti, il che significa che devo solo capire cosa sta succedendo una volta.

  • Mantieni effetti collaterali locali

    Se una funzione nella tua pipeline cambia stato, preferibilmente dovrebbe possedere quello stato ed essere l'unica funzione che la modifica. Hai menzionato lo stato che è necessario in altre parti dell'app. Dovresti provare a vedere se è davvero necessario. Renderà significativamente più difficile da tracciare cosa sta succedendo.

    Se davvero non puoi farne a meno, prova a trovare un modo per contrassegnare lo stato condiviso come tale. Il più chiaramente possibile! Con qualsiasi mezzo necessario!

Hai detto che alcune delle tue trasformazioni prendono il tuo contributo e aggiungono informazioni ad esso. Potrebbe essere proprio la strada da percorrere in molti scenari - e non è un effetto collaterale.

Ad esempio, se i tuoi input sono il prezzo delle azioni e i guadagni per azione, potresti voler calcolare il rapporto prezzo / guadagno e restituire tutti e tre i valori per i calcoli successivi.

Assicurati di mantenere immutabili i tuoi dati, ovvero non aggiungere nulla ai dati di input, ma crea una copia aumentata e restituiscilo come output.

    
risposta data 02.12.2017 - 23:57
fonte

Leggi altre domande sui tag