Résumé¶
Maintenant que vous avez une application fonctionnelle, résumons ce que vous avez construit. Voici à nouveau la structure de l'application, depuis le début :
- Vous avez une application qui affiche des mots dans une liste (
MainActivity,RecyclerView,WordListAdapter). - Vous pouvez ajouter des mots à la liste (
NewWordActivity). - Un mot est une instance de la classe d'entité
Word. - Les mots sont mis en cache dans le
WordListAdaptersous la forme d'une liste de mots (mWords). La liste est automatiquement mise à jour et affichée à nouveau lorsque les données changent. - La mise à jour automatique se produit car dans la
MainActivity, il y a unObserverqui observe les mots et est notifié lorsque les mots changent. Lorsqu'il y a un changement, la méthodeonChange()de l'observateur est exécutée et met à jourmWordsdans leWordListAdapter. - Les données peuvent être observées car il s'agit de
LiveData. Et ce qui est observé est leLiveData<List<Word>>qui est retourné par l'objetWordViewModel. - Le WordViewModel masque tout ce qui concerne le backend à l'interface utilisateur. Il fournit des méthodes d'accès aux données de l'interface utilisateur et renvoie
LiveDataafin queMainActivitypuisse configurer la relation d'observateur. Les vues, les activités et les fragments interagissent uniquement avec les données via leViewModel. En tant que tel, peu importe d'où viennent les données. - Dans ce cas, les données proviennent d'un
Repository. LeViewModeln'a pas besoin de savoir avec quelRepositoryinteragit. Il a juste besoin de savoir comment interagir avec leRepository, ce qui se fait par le biais des méthodes exposées par leRepository. - Le
Repositorygère une ou plusieurs sources de données. Dans l'applicationRoomWordsSample, ce backend est une base de données Room. Room est une couche autour d'une base de données SQLite et en facilite l'implémentation. Room fait beaucoup de travail pour vous que vous deviez faire vous-même auparavant. Par exemple, Room fait tout ce que vous deviez faire avec une classeSQLiteOpenHelper. - Le
DAOmappe les appels de méthode à des requêtes de base de données, de sorte que lorsque le Repository appelle une méthode telle quegetAllWords(), Room peut exécuterSELECT * from word_table ORDER BY word ASC. - Le résultat renvoyé par la requête est un
LiveDataobservé. Par conséquent, chaque fois que les données dans Room changent, la méthodeonChanged()de l'interfaceObserverest exécutée et l'interface utilisateur est mise à jour.