Pattern_UI - Kasimashi/Systemes-embarques GitHub Wiki
Les architectures logicielles pour applications modernes
Il existe plusieurs patterns d’architecture pour organiser le code d’une application, en séparant les responsabilités et en facilitant la maintenance, l’évolution et les tests. Les plus connus sont MVC, MVVM, MVP, MVI et VIPER. Chacun a ses particularités et domaines d’utilisation.
1. MVC (Model - View - Controller)
Concept : Sépare les données (Model), l’interface (View) et la logique de contrôle (Controller).
Usage :
- Très populaire dans le développement web.
- Frameworks majeurs : Ruby on Rails, Django, Laravel, Spring MVC.
- Convient bien aux applications avec des flux utilisateurs simples ou modérés.
2. MVVM (Model - View - ViewModel)
Concept : Introduit le ViewModel pour gérer la logique de présentation et utiliser le data binding entre la View et le ViewModel.
Usage :
- Très utilisé pour les interfaces riches et réactives.
- Frameworks majeurs : WPF, Xamarin, .NET MAUI, Angular, Vue.js, Jetpack Compose, Qt.
- Idéal pour les applications mobiles ou desktop avec mise à jour automatique de l’interface.
3. MVP (Model - View - Presenter)
Concept : La View est passive, le Presenter contient la logique de présentation et interagit avec le Model.
Usage :
- Fréquent dans les applications mobiles Android classiques.
- Frameworks majeurs : Android (avant Jetpack Compose), GWT.
- Convient aux interfaces où l’on veut séparer strictement la présentation et la logique métier.
4. MVI (Model - View - Intent)
Concept : Architecture réactive, centrée sur un flux unidirectionnel et un Model immuable. La View déclenche des Intentions, qui produisent un nouvel état du Model.
Usage :
- Idéal pour les applications modernes réactives et prévisibles.
- Frameworks majeurs : Redux, Jetpack Compose (Android), React avec Redux, Flutter avec Riverpod/BLoC.
- Convient aux interfaces complexes nécessitant un état unique et prévisible.
5. VIPER (View - Interactor - Presenter - Entity - Router)
Concept : Découpe l’application en cinq couches très strictes pour une séparation maximale des responsabilités et une navigation centralisée.
Usage :
- Très utilisé pour le développement mobile iOS, parfois Android.
- Frameworks majeurs : applications natives iOS (Swift/Objective-C).
- Idéal pour des applications mobiles complexes et modulaires, avec de nombreuses interactions et flux.
Comparaison rapide
| Architecture | Interface riche | Flux unidirectionnel | Testabilité | Usage typique |
|---|---|---|---|---|
| MVC | Moyen | Non | Moyenne | Web, Rails, Django |
| MVVM | Oui | Partiel (via binding) | Bonne | Desktop, mobile, Angular, Vue, Qt |
| MVP | Oui | Non | Bonne | Mobile Android, GWT |
| MVI | Oui | Oui | Très bonne | React, Redux, Flutter, Compose |
| VIPER | Oui | Oui (via Router) | Excellente | iOS mobile |
Conclusion
Ces architectures permettent de structurer le code en séparant les responsabilités entre données, interface et logique.
- MVC et MVP sont classiques et simples à comprendre.
- MVVM et MVI sont adaptés aux interfaces réactives.
- VIPER vise une séparation stricte pour des applications mobiles complexes.
Le choix dépend du type d’application, du framework utilisé et du niveau de complexité souhaité.