Gestion des incohérences #
Ce chapitre est dédié à la gestion des incohérences, c’est à dire, toute situation qui mène notre système dans un état incohérent. Ce genre de situation est indésirable et plutôt que de tenter de le corriger, il est même parfois préférable de planter !
Voici quelques exemples de situation incohérente :
- récupérer un index d’une lettre dans un
String
même si la lettre ne s’y trouve pas - récupérer un élément d’une liste à l’aide d’un index plus grand que la taille de la liste
- récupérer un utilisateur à l’aide d’un identifiant inconnu
- planifier une réservation un 30 février
- créer un utilisateur qui a -33 ans
- déposer un montant négatif sur un compte
- attribuer une salle déjà occupée à un professeur
Pour éviter les états incohérents, il est nécessaire de savoir si le problème peut être géré à l’exécution. Si ce n’est pas le cas, il est préférable de planter avec une erreur visible qui permet de corriger rapidement le problème. C’est la technique du fail fast.
Le meilleur moyen d’identifier un état incohérent est à la compilation. Tout ce qui peut l’être nous évite de penser à des situations difficiles et à devoir tester trop de comportements différents. Un bon système de type nous aide. C’est ce que nous avons fait avec la création de deux classes différentes pour une réservation en attente et une réservation planifiée.
Une autre technique est d’utiliser une structure simple pour représenter l’absence de valeurs (les Optional
) plutôt que de produire des valeurs arbitraires.
Enfin, les mécanismes d’exceptions doivent être employés en dernier recours pour permettre de séparer la gestion des erreurs et la logique du programme. Ce mécanisme permet de loguer les erreurs pour identifier le plus rapidement possible qui en est le responsable.