On part d'une liste de fonctionnalités (un backlog, un cahier des charges, des user stories). Cette liste décrit le quoi. La conception, elle, répond au comment.
flowchart LR
F["Fonctionnalités<br>— ce que le système doit faire"]
C["Conception<br>— la structure du système"]
F -->|"analyse, décomposition, décisions"| C
Les fonctionnalités définissent les responsabilités, et les responsabilités définissent la conception.
- Créer une tâche
- Modifier une tâche
- Supprimer une tâche
- Marquer une tâche comme terminée
- Attribuer une date d'échéance
- Filtrer les tâches par statut
- Authentification utilisateur
- Authentification admin
- créer un compte
- Partage de tâches entre utilisateurs
- gestion des permissions
- Notifications de rappel
À ce stade, on est dans le fonctionnel pur. On sait ce que l'application fait, pas encore comment elle est construite.
La première décision de conception consiste à identifier les responsabilités et les regrouper en modules logiques.
| Module | Fonctionnalités incluses |
|---|---|
| Task | Créer, modifier, supprimer, compléter, échéance, filtrer |
| User | Authentification, comptes, droits |
| Sharing | Partage entre utilisateurs, permissions |
| Notification | Rappels, planification d'envoi |
flowchart LR
subgraph modules["Modules identifiés"]
TM["Task Module"]
UM["User Module"]
SM["Sharing Module"]
NM["Notification Module"]
end
Premier choix de conception : découpage modulaire. Chaque module correspond à un domaine métier cohérent. Les fonctionnalités qui changent pour les mêmes raisons sont regroupées ensemble (SRP à l'échelle du module).
On se demande : quelles sont les "choses" importantes que le système manipule ?
Task
User
Reminder
SharePermission