Aller au contenu

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 WordListAdapter sous 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 un Observer qui observe les mots et est notifié lorsque les mots changent. Lorsqu'il y a un changement, la méthode onChange() de l'observateur est exécutée et met à jour mWords dans le WordListAdapter.
  • Les données peuvent être observées car il s'agit de LiveData. Et ce qui est observé est le LiveData<List<Word>> qui est retourné par l'objet WordViewModel.
  • 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 LiveData afin que MainActivity puisse configurer la relation d'observateur. Les vues, les activités et les fragments interagissent uniquement avec les données via le ViewModel. En tant que tel, peu importe d'où viennent les données.
  • Dans ce cas, les données proviennent d'un Repository. Le ViewModel n'a pas besoin de savoir avec quel Repository interagit. Il a juste besoin de savoir comment interagir avec le Repository, ce qui se fait par le biais des méthodes exposées par le Repository.
  • Le Repository gère une ou plusieurs sources de données. Dans l'application RoomWordsSample, 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 classe SQLiteOpenHelper.
  • Le DAO mappe les appels de méthode à des requêtes de base de données, de sorte que lorsque le Repository appelle une méthode telle que getAllWords(), Room peut exécuter SELECT * from word_table ORDER BY word ASC.
  • Le résultat renvoyé par la requête est un LiveData observé. Par conséquent, chaque fois que les données dans Room changent, la méthode onChanged() de l'interface Observer est exécutée et l'interface utilisateur est mise à jour.