Les Design Patterns - Partie 1 : MVC§

1

Le Pattern MVC§

2

MVC : Model View Controller§

Note

Framework : Ensemble de composants qui servent à créer les fondations, l'architecture et les grandes lignes d'un logiciel

3

Représentation schématique (1/2)§

model-view-controller

Source : OpenClassrooms

4

Représentation schématique (2/2)§

model-view-controller-symfony

Source : Documentation Symfony 1.4

5

La partie Modèle§

6

La partie contrôleur§

7

La partie Vue§

8

Avantages de MVC§

9

Projet v2§

10

Vers MVC Maison§

Transformer son code en une architecture MVC Maison

Arborescence à respecter : 3 répertoires "Model", "View", "Controller" ; un index.php qui sert de FrontController, et un répertoire "Library" pour stocker les bibliothèques additionnelles si nécessaire.

  1. Refactoriser le code concernant l'accès aux données pour votre projet en créant/reprenant les classes suivantes:
  • Film (représentation d'un film de la table Film)
  • FilmRepository (contient les méthodes d'hydratation, persistence, mise à jour, suppression)
  • Actor
  • ActorRepository
  • Casting
  • CastingRepository
  • DBConnectionManager

Exemple de Repositories

FilmRepository
- bdd : PDO
+ getById(int) : Film
+ getByYear(int) : Film[]
+ persist(Film)
+ update(Film)
+ delete(Film)
+ getFilmsWith(Actor) : Film[]

NB : getFilmsWith(Actor) fera une jointure sur Casting. En effet un Repository a le droit de requêter une table en rapport avec sa table "de prédilection"

ActorRepository
- bdd : PDO
... même modèle que pour Film
+ getActorsIn(Film) : Actor[]

Idem : getActorsIn(Film) fera une jointure sur Casting.

CastingRepository
- bdd : PDO
+ getBy(Actor, Film) : Casting
+ persist(Casting)
+ update(Casting)
+ delete(Casting)
detail
  1. Refactoriser le reste du code concernant la vue de l'itération 1 :
  • Créer un fichier layout.php (à placer dans le dossier View) contenant tous les éléments communs des vues. Il constue donc un modèle de page (template). Il permet également d'ajouter les éléments spécifiques à chaque vue à l'aide de deux variables $title et $content (la variable $content pourra etre remplie grace à la bufferisation de sortie)
<!DOCTYPE html>
<html lang="fr">
  <head>
    <title><?= $title ?></title>
  </head>
  <body>
    <?= $content ?>
  </body>
</html>
  • Les éléments communs de votre design (menu, boutons, formulaires) devront également etre rajoutés (ou inclus) dans cette page
  • Sans paramètres, le FrontController index.php enverra vers un sous-contrôleur par défaut qui listera tous les films.
  1. On souhaite que l'utilisateur puisse accéder au détail d'un film (en particulier le casting de celui-ci).
  • La page /detailFilm?id=<ID> devra permettre d'afficher les informations relatives à film, ainsi que son casting, avec les acteurs ordonnés par rang de casting en conservant la charte graphique adoptée.
  • Le FrontController doit regarder l'URL et dispatcher vers le contrôleur de detailFilm
  • Modifier l'affichage des films pour y rajouter pour chacun un lien vers le détail de ce film
  • Inclure un lien accueil pour retourner à la liste des films
detail liste
11