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 Kotlin 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 fonctions 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 propriété
allWordsexpose la listeLiveDatade mots de Room. Nous pouvons le faire en raison de la manière dont nous avons défini la fonctiongetAlphabetizedWordspour 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 : la fonction
insertest donc déclarée avecsuspend. Elle sera appelée depuis une coroutine (voir la tâche suivante), et Room effectuera 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.
