Rendre nos objets accessible : les DAO

Objectifs

  • Rendre nos objets Room accessibles

  • Créer nos DAO (Data Access Objects) permettant de communiquer avec nos objets

  • Créer des repository qui feront la transition entre la couche domaine et la couche data

Contexte

Maintenant que nos objets sont créés il nous faut les rendre accessibles. Dans la librairie Room nos objets entités sont rendus accessibles par des DAO (Data Access Objects). Ce sont des classes qui permettent d'accéder à nos données grâce à des requêtes SQL de la même manière que sur une base de données embarquée traditionnelle comme SQLlite.

Fondamental

Une fois nos DAO créés nous y accédons grâce à des classes repository qui ont pour seul but de faire la liaison en lecture et écriture avec le reste de notre application.

Nous avons un DAO et un repository par entité pour respecter la séparation des préoccupations.

Les DAO et les repository sont dans la couche data de notre architecture car ces classes ont pour seul rôle d'interagir avec des données et n'ont aucun lien ou dépendance avec la logique de notre application.

Nous pourrions si besoin copier la couche data dans un autre projet sans avoir à modifier quoi que ce soit.

DAO question :

L'annotation @Dao permet d'indiquer à Room que cette classe est utilisée pour accéder à une entité.

Les fonctions de notre DAO sont présentées avec la query SQL précédée de l'annotation @Query suivie d'une simple définition de la fonction Kotlin qui lui est associée.

Room propose des annotations telles que @Insert pour simplifier et éviter d'écrire la requête SQL d'insertion.

Room nous permet de renvoyer directement des Flow à la sortie de notre DAO, ce qui nous permet de traiter les données de notre base de données Room comme des Flow classiques et donc d'actualiser, par exemple, notre liste de questions automatiquement si des éléments sont ajoutés en base de données.

QuestionRepository :

Notre repository fait appel au DAO et reprend simplement les fonctions dont nous aurons besoin.