Le patron MVC côté serveur
Modèle, vue et contrôleur dans une application web : qui fait quoi, le trajet d'une requête du routeur à la réponse, et les fautes classiques de découpage.
- 22 cartes
- 5 thèmes
- Gratuit
Le programme, thème par thème
Le poids de chaque thème suit celui que lui donne l'examen.
- Notions
- Questions
- Ranger et relier
- Mises en situation
- Comprendre
Quelques cartes du deck
Modèle : de quoi s'agit-il ?
Voir la réponse
Couche qui porte les données de l'application et ses règles métier, et qui seule dialogue avec la base de données.
Le calcul d'une remise ou la vérification d'un stock vivent ici. Comme il ignore HTTP, le même code sert à une page, à un script d'import et aux tests.
En plus du rôle de contrôleur, cette action fait le travail de quelles couches ?
```python
def show(request, id):
row = db.execute("SELECT * FROM articles WHERE id = ?", [id]).fetchone()
return "<h1>" + row["titre"] + "</h1>"`- Le modèle (SQL) et la vue (HTML)
- Le modèle seulement, à cause de la requête SQL
- La vue seulement, à cause de la chaîne HTML
- Le routeur et la vue, car l'action reçoit
idet écrit du HTML
Voir la réponse
Le modèle (SQL) et la vue (HTML)
L'action devrait lire
id, appelerArticle.find(id)et passer le résultat à un gabarit. Ici elle tient les trois rôles. Recevoiridne fait pas d'elle un routeur : le routeur l'a extrait avant de l'appeler. Autre piège : sititrecontient du HTML, la page l'interprète faute d'échappement.Dans MVC, seul le … dialogue avec la base de données et porte les règles métier.
Voir la réponse
Dans MVC, seul le modèle dialogue avec la base de données et porte les règles métier.
Une requête SQL écrite dans un contrôleur ou dans une vue est une faute de découpage : elle est liée à l'affichage ou à HTTP et ne se réutilise pas.
Vue : de quoi s'agit-il ?
Voir la réponse
Couche qui met en forme les données reçues pour les montrer, par exemple en HTML, sans rien changer à leur état.
Elle boucle et teste pour afficher, c'est tout. Pas de SQL, pas de règle métier : on peut remplacer le HTML par du JSON sans toucher au reste.
Le calcul du prix avec remise est recopié dans deux gabarits, et un jour les deux affichent des totaux différents. Quelle réparation respecte le découpage MVC ?
- Le placer dans un gabarit commun que les deux pages incluent
- Le laisser dans le contrôleur de la première page, que la seconde appelle
- Ajouter un test qui compare les deux totaux après chaque changement
- Le mettre dans le modèle, appelé par le contrôleur
Voir la réponse
Le mettre dans le modèle, appelé par le contrôleur
Une règle métier doit exister une fois, dans le modèle. Le contrôleur en obtient le résultat et la vue l'affiche : les deux pages donnent forcément le même total. Un gabarit commun garderait le calcul dans la vue, un test ne ferait que signaler l'écart.