• 10 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 07/08/2024

Décryptez l’architecture MVVM

Maintenant que nous avons clarifié nos besoins et établi les bases de notre projet, il est temps de préparer les écrans à refactoriser. Pour cela, nous allons nous familiariser avec les patterns de développement logiciel, en particulier le pattern MVVM (Model-View-ViewModel).

Découvrez les patterns

Un pattern, ou modèle de conception, est une solution réutilisable à un problème courant dans un contexte donné. Imaginez que vous essayez de construire un meuble en kit sans instructions. Ce serait compliqué, non ? Un pattern, c'est comme un guide de montage : il vous aide à résoudre un problème de manière efficace et structurée. En développement logiciel, les patterns permettent :

  • D’offrir des approches standardisées pour résoudre des problèmes récurrents, augmentant ainsi la robustesse et la qualité du code.

  • De fournir des solutions éprouvées qui peuvent être appliquées à différents projets, permettant de gagner du temps et d'éviter de réinventer la roue.

D’utiliser un vocabulaire commun qui permet aux développeurs de mieux comprendre et discuter des solutions.

Types de patterns couramment utilisés en développement

Il existe plusieurs types de patterns en développement logiciel, chacun répondant à des besoins spécifiques. Ils se regroupent généralement en trois catégories : les patterns de création, les patterns de structuration et les patterns comportementaux.

Type de patterns

Définition

Principal objectif

Exemples de patterns

Pattern de création (Creational Patterns)

Ces patterns concernent la création d'objets. 

Contrôler et standardiser le processus de création des objets.

Singleton, Factory, Abstract Factory

Pattern de structuration (Structural patterns)

Ils traitent de la composition des classes ou des objets. 

Faciliter la création de structures complexes en assemblant des objets d'une manière flexible et extensible.

Adapter, Decorator, Composite, MVC, MVVM, MVP, VIPER

Pattern comportemental (Behavioral patterns)

Ces patterns concernent les interactions et la responsabilité entre les objets.

Aider à définir clairement comment les objets communiquent entre eux.

Observer, Strategy, Command

Appréhendez le pattern MVVM

Maintenant que nous avons distingué les trois types de patterns en développement logiciel, plongeons-nous dans celui que nous allons utiliser pour refactoriser notre application EPCollaboratif : le pattern MVVM.

Introduction au pattern MVVM : Model-View-ViewModel

Le pattern MVVM divise l'application en trois composants principaux : le Model (Modèle), la View (Vue) et le ViewModel (Modèle de Vue). Chacun de ces composants endosse des responsabilités bien définies qui contribuent à une architecture claire et modulaire.

Schéma du pattern MVVM en quatre étapes avec un utilisateur, une View, un ViewModel et un Model. L'utilisateur interagit avec la View, qui récupère et propose des mises à jour au ViewModel, lequel à son tour récupère et actualise les données
Les trois composants du pattern MVVM
La View

La View représente l’interface utilisateur. Elle affiche les données (ou propriétés) aux utilisateurs et capte leurs interactions. Elle observe les changements dans le ViewModel pour mettre à jour l'interface utilisateur de manière réactive.

Le ViewModel

Le ViewModel sert d’intermédiaire entre la View et le Model. Ce composant prend les données du Model et les transforme en un format utilisable par la View. Il gère les interactions utilisateur et met à jour le Model en conséquence.

Le Model

Le Model récupère, stocke et manipule les données nécessaires à l'application. Toute la logique métier qui concerne le traitement des données se trouve dans le Model. En revanche, il ne contient aucune logique d’affichage.

Dans quel ordre doit-on lire et comprendre les couches ?

L’ordre dans lequel l’acronyme MVVM est construit n’est pas vraiment logique. Gardez donc en tête l’analogie des poupées russes. La View est représentée par la plus grosse poupée, qui contient alors le ViewModel, qui lui-même contient le Model. C’est plutôt cet ordre que je vais suivre dans le cours.

Communication entre la View, le ViewModel et le Model

La communication entre ces composants se fait principalement via le data binding, les commandes et les notifications de changement.

Ce schéma présente l'architecture MVVM. Un icône Utilisateur interagit avec la View. Les interactions sont numérotées de 1 à 4, démontrant les flux entre la view, le viewmodel et le model, via des flèches bidirectionnelles indiquant le data bindin
La communication entre les trois composants du pattern MVVM
  • Data binding : Il permet de lier directement les propriétés du ViewModel aux éléments de l'interface utilisateur. Par exemple, en SwiftUI, on utilise les annotations@Published et@ObservableObject pour lier les données.

  • Commandes : Les commandes permettent de lier des actions utilisateur (comme des clics de bouton) à des méthodes dans le ViewModel.

  • Notification de changement : Elles sont utilisées pour informer la View des changements dans le ViewModel, souvent via des observables ou des clôtures.

Explorez les avantages du MVVM

Maintenant que nous avons une bonne compréhension des composants et des principes du pattern MVVM, voyons plus précisément pourquoi il est particulièrement avantageux pour le développement d'applications iOS.

La séparation des responsabilités est un principe fondamental du MVVM. En divisant clairement le code en trois composants (Model, View, ViewModel), nous obtenons plusieurs bénéfices :

Développement parallèle

Les développeurs peuvent travailler sur différents composants de manière indépendante.

Maintenance

Lorsqu'une partie de l'application doit être mise à jour ou corrigée, les modifications sont localisées et ne nécessitent pas de parcourir tout le code.

Réutilisabilité

Les ViewModels et les Models peuvent être réutilisés dans différentes parties de l'application ou même dans d'autres projets. En limitant au maximum leurs dépendances avec d’autres composants.

Simplification du code de la View

En séparant la logique de traitement des données et gestion de l'interface utilisateur, cela permet aux développeurs de se concentrer sur la conception de l'interface sans se soucier de la logique complexe qui se trouve en arrière-plan.

Amélioration de la testabilité

Cette séparation facilite considérablement la testabilité. Les ViewModels, étant indépendants de la View, peuvent être testés de manière isolée en utilisant des tests unitaires, ce qui accélère le cycle de développement et améliore la fiabilité du code.

Comparez les avantages du MVVM avec les autres patterns

Comparons les principaux avantages du pattern MVVM avec ses autres cousins actuellement utilisés dans la sphère iOS.

Avantages du MVVM par rapport aux autres patterns

MVC (Model-View-Controller)

MVP (Model-View-Presenter)

VIPER (View-Interactor-Presenter-Entity-Router)

MVVM

MVVM offre une séparation plus claire des responsabilités que MVC, où le Controller peut souvent devenir un point de congestion contenant trop de logique. 

  • Dans le MVP, le Presenter doit manuellement gérer les mises à jour de la View. Dans le MVVM, le ViewModel utilise le data binding pour automatiser ce processus.

  • Le ViewModel est plus facilement testable que le Presenter car il ne contient pas de référence directe à la View.

VIPER est très structuré mais peut être excessivement complexe pour des applications plus simples. MVVM trouve un bon équilibre entre structuration et simplicité. Il est aussi souvent plus flexible et adaptable à différents types de projets.

À vous de jouer

Contexte

Vous avez analysé les fonctionnalités, la navigation et la documentation de l’écran "AddTaskView". Vous avez aussi commencé à identifier les éléments monolithiques de cet écran. Maintenant, il est temps de commencer à dégager et découper les responsabilités de cet écran pour les situer dans les couches correspondantes du pattern MVVM.

Consignes

  1. Identifiez les éléments de la View qui contiennent de la logique métier et ajoutez-les aux éléments monolithiques que vous avez listés dans l’activité précédente.

  2. Proposez une piste d’amélioration pour apporter plus de modularité à l’écran.

Livrable

Un rapport répondant aux deux consignes.

En résumé

  • Les patterns se classent en trois catégories principales : création (creational), structuration (structural) et comportemental (behavioral).

  • Le pattern MVVM divise l'application en trois composants principaux : Model, View et ViewModel, chacun avec des responsabilités spécifiques.

  • Le Model gère les données et la logique métier, la View affiche l'interface utilisateur et observe le ViewModel. 

  • Le ViewModel sert d'intermédiaire en transformant les données du Model pour la View.

  • La séparation des responsabilités permet le développement parallèle, assure une meilleure maintenance et réutilisabilité, simplifie le code de la View et améliore la testabilité de l’application. 

Maintenant que vous avez une bonne compréhension du pattern MVVM et de ses avantages, passons à l’analyse des écrans de l’application EPCollaboratif. Cela nous permettra d'identifier les zones à améliorer pour la refactorisation en utilisant le pattern MVVM.

Exemple de certificat de réussite
Exemple de certificat de réussite