Dans ce chapitre, nous allons aborder une notion d'architecture logicielle, afin de l'appliquer à notre application TopQuiz.
Lorsque vous développez une application Android, vous êtes libre d'utiliser l'architecture logicielle de votre choix. Toutefois, votre code risque de ne pas être compris par le commun des mortels, vos collègues vous ignoreront et n'iront plus déjeuner avec vous. De votre côté, vous risquez également de peiner à maintenir le code d'un autre, voire de jeter votre clavier par la fenêtre (sauf si vous codez dans une cave).
De fait, les développeurs débutant Android (mais pas qu'eux !) utilisent une architecture très simple appelée MVC, pour Model-View-Controller, (ou Modèle-Vue-Contrôleur, en français). Cette architecture, bien que vieillissante, est très classique et facile à aborder. C’est donc celle que nous utiliserons pour notre application TopQuiz.
Pour les petits curieux, l’architecture recommandée par Google pour Android est le MVVM (pour Model-View-ViewModel). Pour le moment, concentrons-nous sur le MVC, plus simple à aborder !
L'architecture MVC
Description
L'architecture MVC consiste à découper son code pour qu'il appartienne à l'une des trois composantes du MVC. Lorsque vous créez une nouvelle classe ou un nouveau fichier, vous devez donc savoir à quelle composante il appartient :
Modèle : contient les données de l'application et la logique métier. Par exemple, les comptes des utilisateurs, les produits que vous vendez, un ensemble de photos, etc. La composante modèle n'a aucune connaissance de l'interface graphique. Dans notre application TopQuiz, elle regroupera l'ensemble des questions et des réponses associées.
Vue : contient tout ce qui est visible à l'écran et qui propose une interaction avec l'utilisateur. Par exemple, les boutons, les images, les zones de saisie, etc. Dans notre application TopQuiz, cette composante est définie dans les fichiers activity_main.xml et activity_game.xml.
Contrôleur : c'est la "colle" entre la vue et le modèle, qui gère également la logique de l'application. Le contrôleur permet de réagir aux interactions de l'utilisateur et de lui présenter les données qu'il demande. Et ces données, où les récupère-t-il ? Dans le modèle, bien entendu ! Dans notre application TopQuiz, cela correspond au code situé dans les fichiers MainActivity.java et GameActivity.java.
Afin de rendre votre code plus modulaire et maintenable (vos futurs collègues vous remercieront), n'hésitez pas à créer des packages complémentaires dans Android Studio.
Comment créer un sous-répertoire pour organiser votre code ? C'est très simple. Faites un clic droit sur le dossier dans lequel vous souhaitez créer un sous-répertoire, puis sélectionnez New > Package. Nommez-le (par exemple controller). Ensuite, déplacez les fichiers dans ce nouveau répertoire (par exemple les fichiers de type Activity), et validez en cliquant sur le bouton Refactor.
Application
Lorsque l'utilisateur interagit avec l'application, par exemple en répondant à une question, voilà ce qu'il se passe :

Dans le point 3, le contrôleur pourrait tout à fait mettre à jour le modèle si nécessaire : par exemple si l'utilisateur mettait à jour ses préférences.
Avantages
En appliquant l'architecture MVC, vous permettez à vos collègues de mieux comprendre votre code. Vous aurez également la garantie de pouvoir réutiliser votre code très facilement. Par exemple, vous pourriez décider d'exporter le modèle de votre application sous forme de librairie, afin qu'un autre développeur puisse l'utiliser dans son application. Ainsi, peut-être proposera-t-il une interface graphique complètement différente de la vôtre !
Inconvénients
Vous aurez à créer et à maintenir davantage de fichiers (il est tellement plus tentant de tout mettre au même endroit !). Mais c'est un mal pour un bien, croyez-moi.
En résumé
L’architecture MVC est abordable et simple à intégrer, elle convient donc aux applications simples.
L’Activity est le contrôleur : il fait le lien entre la vue (les Widgets du layout) et la logique métier (le modèle).
En MVC, le modèle peut être réutilisé dans d’autres Activity pour éviter la duplication de code.
Voilà, vous venez de découvrir l'architecture MVC. Dans le prochain chapitre, nous allons nous intéresser à la composante modèle de l'architecture MVC, voir comment le définir et l'implémenter dans notre application.