# MVP (Modèle Vue Présentateur)

## Patron architectural

Un patron architectural est une solution générale et réutilisable à un
problème architectural, comme les patrons de conceptions mais ont une
portée plus large. Dans le cas de celui que l'on va voir ici, on
remarquera qu'il est lui même composé des patrons
[Façade](https://books.snowcode.ovh/books/conception-orientee-objet/page/facade) et
[Adaptateurs](https://books.snowcode.ovh/books/conception-orientee-objet/page/adaptateur) vus précédemment.

## MVP

Voici ce que l'on obtient quand on combine les deux derniers patterns
(façade et adaptateurs) :

[![2023-10-03_22-53-13_screenshot.png](https://books.snowcode.ovh/uploads/images/gallery/2023-10/scaled-1680-/2023-10-03-22-53-13-screenshot.png)](https://books.snowcode.ovh/uploads/images/gallery/2023-10/2023-10-03-22-53-13-screenshot.png)

Ici les classes \*ExaminatorView et \*ResultRepository sont des
adaptateurs, tandis que les classes de java sont les services.

Mais on peut aussi y voir la façade car la classe Examinator agit comme
une façade pour le reste du système.

En vérité, cette structure correspond au patron architectural "MVP"
(Modèle Vue Présentateur)

[![2023-10-03_22-56-00_screenshot.png](https://books.snowcode.ovh/uploads/images/gallery/2023-10/scaled-1680-/2023-10-03-22-56-00-screenshot.png)](https://books.snowcode.ovh/uploads/images/gallery/2023-10/2023-10-03-22-56-00-screenshot.png)

Dans l'exemple précédent :

- Examinator est le Présentateur (il n'intéragit qu'avec la vue et le
  modèle).
- ExamResultRepository est le Modèle qui s'occupe de tout ce qui est de
  la gestion des données (oui dans le MVP le modèle est simplement une
  classe et pas une interface, mais cela dépends simplement des besoins
  de l'application)
- ExaminatorView est l'interface des vues
- ConsoleExaminatorView et SwingExaminatorView sont les classes
  concrètes de la vue.

[![2023-10-03_22-59-21_screenshot.png](https://books.snowcode.ovh/uploads/images/gallery/2023-10/scaled-1680-/2023-10-03-22-59-21-screenshot.png)](https://books.snowcode.ovh/uploads/images/gallery/2023-10/2023-10-03-22-59-21-screenshot.png)

## Caractéristiques du MVP

- Une vue ne conait que son présentateur
- Le présentateur supervise les vue via une interface
- Le présentateur met à jour le modèle du domaine puis la vue
- Le patron de l'observateur peut être envisagé pour affaiblir le
  couplage