Créer la classe Repository¶
6.1 Qu'est-ce qu'une classe Repository ?¶
Une classe Repository est une abstraction qui permet d'accéder à plusieurs sources de données. La classe Repository ne fait pas partie des bibliothèques Architecture Components, mais elle est suggérée comme bonne pratique pour la séparation du code et l'architecture. Une classe Repository fournit une API propre pour l'accès aux données au reste de l'application.

6.2 Pourquoi utiliser une classe Repository ?¶
Un référentiel (Repository) gère les requêtes et vous permet d'utiliser plusieurs bases de données. Dans l'exemple le plus courant, le référentiel implémente la logique permettant de décider s'il faut récupérer les données d'un réseau ou utiliser les résultats mis en cache dans une base de données locale.
6.3 Implémenter la classe Repository¶
- Créez une classe publique appelée
WordRepositorysous la racine du package de votre application. - Effectuez un clic droit sur la classe
WordRepository, puis sélectionnez Refactor > Move pour la déplacer sous le packagedata. - Ajoutez le code suivant :
Explications :
- Le DAO est passé au constructeur du dépôt au lieu de l'ensemble de la base de données. En effet, vous n'avez besoin d'accéder qu'au DAO, car il contient toutes les méthodes de lecture et d'écriture pour la base de données. Il n'est pas nécessaire d'exposer l'ensemble de la base de données au dépôt.
- La méthode
getAllWordsrenvoie la listeLiveDatade mots de Room. Nous pouvons le faire en raison de la manière dont nous avons défini la méthodegetAlphabetizedWordspour renvoyerLiveDataà l'étape "Utiliser la classe LiveData". Room exécute toutes les requêtes sur un thread séparé. Ensuite,LiveDataobservé avertira l'observateur sur le thread principal lorsque les données auront changé. - Nous devons éviter d'exécuter l'insertion sur le thread principal, nous utilisons donc l'
ExecutorServiceque nous avons créé dansWordRoomDatabasepour effectuer l'insertion sur un thread d'arrière-plan.
Rôle du Repository
Les référentiels sont destinés à servir d'intermédiaire entre différentes sources de données. Dans cet exemple simple, vous n'avez qu'une seule source de données, donc le référentiel ne fait pas grand-chose. Consultez l'exemple de base pour une implémentation plus complexe.