Continuo a girare la testa attorno a RAC e FRP in generale - attualmente non riesco a capire come implementare un pattern che ho comunemente dovuto usare altrove.Invalidazione della cache in ReactiveCocoa
Diciamo che sto facendo un'app flashcard, e la schermata principale è una lista dei miei mazzi di carte. Questa app utilizza lo stato del server di rete come fonte di verità. Non voglio recuperare questa lista di mazzi dal server ogni volta che viene visualizzata la schermata - così eccezionale, posso usare una richiesta di rete differita in un segnale multicast con un oggetto di riproduzione per memoizzare effettivamente tale elenco.
Ho due modi in cui questa lista dovrebbe aggiornarsi recuperando dal server, che è dove per me diventa complicato. Voglio essere in grado di invalidare questa lista "memorizzata nella cache" quando un numero qualsiasi di cose accade nell'app (ad esempio, l'utente naviga su un'altra schermata e fa qualcosa che renderebbe l'elenco dei mazzi sulla schermata iniziale non aggiornato o l'app è appena stato risvegliato, quindi possiamo supporre che potrebbe non essere aggiornato per essere sicuro), in modo che la prossima volta che l'utente ritorni a questa schermata iniziale non mostrerà nulla all'inizio (piuttosto che mostrare la vecchia lista, poiché sa che è non aggiornato a causa dell'azione dell'utente) e recupererà l'elenco, visualizzandolo una volta scaricato. Come posso gestire più elegantemente questo stato "invalidato" (si spera senza stato effettivo)?
Voglio anche essere in grado di scadere l'elenco "memorizzato nella cache" su un timeout - in pratica, il segnale dell'elenco di tabelle fornisce l'elenco memorizzato nella cache fino a quando non è trascorso abbastanza tempo, a quel punto pigramente farà una richiesta di rete prima fornendo i dati.
Ho un paio di idee su come implementare queste due cose, ma sembrano un po 'contorte. Mi piacerebbe avere una guida o essere indicato nella direzione di qualche progetto di esempio.
Un semplice modo che posso vedere per gestire questa situazione è quello di avere un livello di servizio che è di importanza fondamentale, e gestire il caching e invalidazione della cache imperativamente e l'utilizzo di eventi broadcast per invalidare la cache e sia tornare dalla cache o generare una richiesta di rete per popola la cache quando il livello reattivo tenta di accedere ai dati. Preferirei non rimandare a questo metodo senza prima capire il modo reattivo di farlo.
Grazie!
Cross-postato qui: https://github.com/ReactiveCocoa/ReactiveCocoa/issues/899 – aehlke
I love the risposta inviata da @kastiglione in quella discussione. – erikprice