Dessiner un système avant de le construire
Modéliser un système, c'est en faire un dessin simplifié qui garde l'essentiel et cache le reste. Un diagramme permet à toute une équipe de se mettre d'accord avant d'écrire du code.
Le système de réservation de salles sert encore d'exemple. Vous allez le dessiner de deux façons, puis comparer le dessin à la vraie table.
À la fin de cette leçon
Remarque
Je peux dessiner et lire le modèle d'un système avec un diagramme.
Mots clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Modèle | un dessin simplifié qui garde seulement l'essentiel | |
| Entité | une chose dont le système garde des informations | Salle |
| Relation | un lien entre deux entités | concerne |
| Diagramme de classes | un dessin des entités et de leurs relations | |
| Diagramme de séquence | un dessin des messages échangés, dans l'ordre | |
| Mermaid | un langage en texte qui dessine des diagrammes |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Le diagramme de classes montre les liens
Chaque boîte est une entité. Elle porte un nom et la liste de ce qu'elle garde. Chaque flèche est une relation, avec un verbe qui se lit tout seul.
Le texte ci-dessous est écrit en Mermaid. Le site le transforme en dessin. Lisez les flèches : une réservation concerne une salle et est faite par un demandeur.
Exemple : lire une flèche du diagramme
| Écriture | Se lit |
|---|---|
| Reservation "*" --> "1" Salle | Plusieurs réservations pour une seule salle |
| Le verbe après les deux-points | Ce que la relation veut dire |
| Les noms dans la boîte | Les informations que l'entité garde |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Un diagramme de séquence montre l'ordre des messages
Le premier dessin montre ce qui existe. Le second montre ce qui se passe, dans le temps. Chaque colonne est une partie du système. Chaque flèche est un message, de haut en bas.
Une flèche pleine est un appel. Une flèche en pointillés est une réponse.
Une erreur fréquente
Attention
Beaucoup pensent qu'un bon modèle montre tout : chaque colonne, chaque fonction. Plus il y a de détails, moins on le lit. Gardez ce qui répond à la question posée, et rien d'autre.
On compare le dessin à la vraie table
Le dessin a trois entités : Salle, Demandeur et Reservation. Regardons ce que la base a vraiment.
Préparez la table, lisez ses colonnes avec psql, puis envoyez une réservation par l'API. C'est le message du diagramme de séquence, joué pour de vrai.
Donner le mot de passe à psql
export PGPASSWORD=shopAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Repartir de zéro
psql -h db -U shop -c "drop table if exists reservations"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Créer la table reservations
psql -h db -U shop -c "create table reservations (id serial primary key, salle text not null, demandeur text not null, creneau text not null, statut text not null default 'demandee')"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Lire les colonnes et leurs types
psql -h db -U shop -t -A -c "select column_name || ' ' || data_type from information_schema.columns where table_name = 'reservations' order by ordinal_position"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Dire à l'API de relire la base
psql -h db -U shop -c "notify pgrst, 'reload schema'"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Jouer le message POST du diagramme
curl -s -o /dev/null -w "%{http_code}\n" -X POST -H "Content-Type: application/json" -d '{"salle":"B102","demandeur":"Claire Dupuis","creneau":"lundi 10h"}' "http://api:3000/reservations"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
La table est plus pauvre que le dessin
Le dessin avait trois entités. La table n'en a qu'une : la salle et le demandeur y sont de simples textes. Ce n'est pas une erreur, c'est un choix de modèle.
Avec ce choix, on ne peut pas ranger la capacité d'une salle. Et le nom d'une salle mal écrit crée une salle de plus. Un modèle fait voir ces conséquences avant de construire.
Exemple : le dessin et la table
| Dans le dessin | Dans la table | Conséquence |
|---|---|---|
| Entité Salle avec une capacité | Colonne salle en texte | Pas de capacité |
| Entité Demandeur | Colonne demandeur en texte | Un nom peut s'écrire de deux façons |
| Entité Reservation | Table reservations | Identique |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.