Abbiamo terminato l'origine dati remota.
Passiamo ora al repository.
Il repository è un componente cruciale che funge da mediatore tra le diverse fonti di
dati e il resto dell'applicazione ed è una parte molto importante del livello del modello.
Il livello del modello rappresenta il livello dei dati dell'applicazione.
Questo include il modello dei dati e la logica per il recupero e la manipolazione
dei dati, sia che provengano da un database, dalla rete o da altre fonti.
In questa applicazione, recupereremo i dati dalla rete.
Lo schema del repository viene utilizzato per creare un'API pulita per l'accesso ai dati al resto dell'applicazione.
Astrae le fonti di dati sottostanti e fornisce un luogo centralizzato per gestire le operazioni sui dati.
Torniamo ad Android Studio, creiamo il pacchetto di retrofit e completiamo l'implementazione del retrofit.
Ora creeremo un nuovo pacchetto.
Lo chiamerò repository.
All'interno di questo pacchetto di repository, creare una nuova classe Kotlin chiamata Post repository.
Ancora una volta, è molto importante ricordare che il repository funge da mediatore tra
l'origine dei dati, in questo caso le API di rete, e il ViewModel.
La sua responsabilità principale è quella di recuperare i dati e fornirli al ViewModel.
Tralasciando i dettagli dell'origine dei dati, inizierò a creare il primo passo.
Una variabile di servizio privata val API uguale all'istanza retrofit dot API.
Accedo al singleton da qui.
Ora questa proprietà API è un'istanza dell'interfaccia del servizio API,
che retrofit può creare per effettuare chiamate di rete.
La riga assicura che il repository Post abbia accesso ai metodi definiti nel servizio API.
Poi abbiamo bisogno di una funzione per recuperare i post.
Quindi, se torniamo al servizio API, abbiamo solo una funzione.
Se avete molte API e molte altre interfacce e molte
altre funzioni, dovreste menzionare tutte queste funzioni nel repository.
Quindi viene creato un solo metodo per ottenere i messaggi.
Dobbiamo chiamare questa funzione "get posts".
Inizierò con la funzione di sospensione, perché è una funzione di sospensione.
Get posts restituisce un elenco di post e richiama il servizio API dot get posts.
Get posts è una funzione di sospensione, cioè può essere richiamata da una coroutine o da un'altra funzione di sospensione.
Questo è importante per eseguire operazioni di rete senza bloccare il thread principale
e la funzione get posts sul servizio API è una funzione di sospensione,
quindi sto chiamando questa funzione di sospensione all'interno della funzione di sospensione.
Posts qui è annotato con get, a indicare che
eseguirà una richiesta Get all'endpoint posts dell'URL di base.
La funzione di sospensione restituisce un elenco di oggetti post che retrofit deserializza dal repository dei
post con risposta JSON, in questo caso astraendo la fonte di dati dal resto dell'applicazione.
Il ViewModel non deve sapere come vengono recuperati i dati,
ma solo che può richiedere i dati dal repository.
Lo schema del repository aiuta a fornire un'unica fonte di verità per i dati, in qualsiasi momento e indipendentemente
dal fatto che i dati provengano da una chiamata di rete, da un database o da una cache.
Il ViewModel interagisce solo con il repository.
Utilizzando il repository, si mantiene la logica di recupero dei dati separata
dal ViewModel e dall'interfaccia utente, aderendo al principio della separazione delle preoccupazioni.
Anche se non viene mostrato in questo semplice esempio, il repository può gestire
gli errori ed eseguire trasformazioni dei dati prima di passarli al ViewModel.
Utilizzando il repository Post, l'architettura MVVM viene mantenuta pulita, assicurando che ogni componente
abbia una responsabilità ben definita e che il codice rimanga modulare e testabile.