Activité : Le pattern « MVC2 »

Situation

Vous êtes employé par une entreprise de développement spécialisée dans le logiciel en Java sans expérience dans le développement web. La direction a néanmoins accepté un mandat pour la réalisation d’une application web et le travail est en cours. Vous venez d’être intégré à l’équipe de développement et vous devez maintenant vous familiariser avec le langage PHP et le pattern MVC côté serveur.

Consigne

Dans le cadre de ce projet, vous devez reprendre le code d’un forum de discussion et y apporter des modifications.

Objectifs

À la fin de ce travail, vous devez :

  1. Être capable d’expliquer ce qu’est le pattern MVC (ou MVC2) dans le contexte du développement de la partie serveur d’une application Web.

Résultat attendu

  • Un bref rapport qui décrit votre travail et votre démarche.
  • Le code source de votre application.

Ressources

Documents :

Logiciel :

  • Machine virtuelle de développement
  • NetBeans
  • Le gestionnaire de dépôts GitLab (gitlab.epai-ict.ch)
  • Le système de contrôle de version git
  • Chrome et Firefox, Serveur HTTP Apache

Introduction

Dans le contexte du développement d’application Web, le sigle MVC ne désigne pas la même chose selon que l’on parle du développement de la partie « serveur » ou de la partie « client » de l’application. Dans ce module, nous nous concentrons exclusivement sur la partie serveur. La partie client est abordée dans le module dédié au développement d’interface utilisateur graphique (M120).

Dans notre contexte, MVC (Modèle-Vue-Contrôleur) est une manière d’implémenter le serveur Web selon les principes de la programmation orientée objet. En particulier, ce parttern propose de séparer les responsabilités — en vertu du principe de responsabilité unique (single responsibility principle) — comme suit :

  • Contrôleur : Représente une ressource ou un type de ressource. Les requêtes pour une ressource particulière ou un type de ressource particulier.
  • Vues : Représente une représentation pour une ressource. Il s’agit généralement d’une classe générique qui permet de produire une représentation HTML, JSON ou XML, par exemple, à partir d’un modèle (template).
  • Modèle : Représente un objets métier. Il ne doit avoir aucun lien vers des contrôleurs ou des vues et rien dans son code ne permet de dire qu’il s’agit d’une application Web.

Démarrage

Reprendre le code depuis le dépôt git (git repository)

Le code que vous devez modifier se trouve sur un dépôt git auquel vous avez accès à l’aide de votre login habituel. Pour cloner le dépôt sur votre poste de travail, exécutez les commandes suivantes :

1
2
3
4
5
dev@vmdev:~$ cd ~/projects
dev@vmdev:~/projects$ git clone https://gitlab.epai-ict.ch/m133/blog.git
Clonage dans 'blog'...
Username for 'https://gitlab.epai-ict.ch': 
Password for 'https://frossardj@gitlab.epai-ict.ch': 
Fig 1. – Cloner le dépôt git

Vous devriez maintenant voir un répertoire blog, c’est le répertoire du projet. Déplacez-vous dans le réptoire blog/data, exécutez les scrits init_db.sh et init_httpsvr.sh pour initialiser la base de données et le serveur HTTP et ouvrez le projet dans NetBeans.

Tâches

  1. Configurez le projet Netbeans pour qu’il démarre avec l’URL http://blog.m133.local/ et que les fichiers soient copiés dans le répertoire ~/www/blog.m133.local (Attention : les fichiers ne doivent pas être copiés dans ~/www/blog.m133.local/blog).
  2. Lancez le programme et testez-le. Observez les URL. Ces URL correspondent-elles à des script PHP ? Comment nginx traite-t-il ces URL ?
  3. Étudiez le fichier index.php. Comment le script PHP reçoit-il l’URL de la requête ? Que fait-il avec cet URL ?
  4. Étudiez la classe HomeController et expliquez ce qu’elle fait. À quel endroit dans le script une instance de cette classe est-elle créée ? Quel est son rôle ?
  5. Étudiez les différents contrôleurs. Qu’ont-ils tous en commun ? Comment les méthodes doGet et doPost sont-elles appelés ?
  6. À quoi servent les classes PostHtmlFormater et CommentHtmlFormater ? Pourquoi n’est-ce pas une bonne idée de faire ce qu’elles font directement dans les classes Post et Comment ?
  7. Étudier la classe Session et la classe Request. Quel avantage y a-t-il à utiliser ces classes plutôt que d’utiliser les variables super globales de PHP ? Qu’est-ce que cela permet de faire ?
  8. Modifier le programme pour que la date et l’heure des commentaires soient affichées dans la vue détaillée des billets et dans la vue qui permet d’ajouter un commentaire.