Attualmente ho lo scenario seguente.
Ho due progetti: API Web ASP.NET Core e app Xamarin.Forms. L'idea generale è di avere un consumatore (app Xamarin.Forms) che sta ricevendo dati dal server (Web API).
Quello che voglio implementare è il modello di cache per l'app mobile. Diciamo che stiamo ricevendo alcuni prodotti dal server e quindi vogliamo memorizzarli nella cache, quindi la prossima volta che utilizzi l'app aperta non recupererà nuovamente tutti i prodotti.
Il problema si presenta quando questi prodotti vengono aggiornati, quindi vogliamo che la nostra app mobile rimanga sempre con i dati più recenti, ma aggiorna i prodotti solo se sono aggiornati. Per questo ho preso in considerazione l'utilizzo del controllo delle versioni sulle entità del mio database (prodotti). Ad esempio, la prima volta quando la richiesta di app per ottenere il prodotto invierà l'intestazione null
della versione, l'API la individuerà, recupererà dal prodotto del database e la restituirà con la sua versione, ad esempio 5
. Dopo che il prodotto potrebbe essere aggiornato, la versione verrà aumentata con uno. Quando l'app invia una richiesta per ottenere di nuovo il prodotto, a seconda della versione dell'intestazione fornita nell'API otterrà i dati più recenti dal database o restituirà il codice di stato 304 NotModified
.
Mentre stavo sviluppando questo scenario, ho deciso di cambiare "versione int" semplicemente "DateTime lastModified", che trovo un po 'più utile.
La mia lotta sta arrivando quando ho uno scenario con più elementi, diciamo che voglio ottenere tutti i prodotti dalla categoria. Quindi non sono sicuro di quale sia il caso migliore per risolvere questo problema. Mi aspettavo che il consumatore mi inviasse la raccolta con ID prodotto e l'ultima modificata, quindi posso scorrere tutte e controllare se qualcosa è cambiato. Un'altra opzione prevede che l'invio sia l'hash di quella raccolta, quindi sul lato server posso eseguire la ricerca hash e confrontare gli hash. Terza opzione è, se per ogni collezione ho una proprietà extra che contiene l'ultima modifica, ma poi avrò una colonna aggiuntiva nel database (SQL) per ogni relazione many
e quindi la modifica del prodotto richiederebbe un codice aggiuntivo, per trovare tutto è relazioni e aggiorna tutte le proprietà.
Generalmente il mio problema è quando si tratta di collezioni.
Questo è ancora un buon modo per progettare un'applicazione? Quello che voglio ottenere è ridurre il traffico tra server e utenti.
Sono aperto per qualsiasi altro suggerimento!
Grazie in anticipo!