Bonjour,
Je viens de relire le papier de SQLPro sur le développement en base de données épaisse et je suis toujours convaincu de sa pertinance.
Néanmoins, j'ai des doutes - et mes collègues développeurs ou mon chef encore plus - sur la pertinence de mettre le contrôle des données saisies par l'utilisateur applicatif dans le code de la BDD.
Soit un formulaire de saisie avec de multiples champs. Ma maîtrise actuelle du concept de développement en BDD épaisse fait que la première donnée issue de ce formulaire qui ne sera pas conforme à sa règle (trop longue, hors plage acceptable...) mettra fin à la procédure d'enregistrement et renverra un message d'erreur à l'application.
L'utilisateur corrige la donnée et renvoie le formulaire et, malchance, une autre donnée inacceptable déclenche un nouveau message d'erreur et ainsi de suite jusqu'à ce que toutes les données soient acceptées par la procédure SQL de traitement.
Alors que si les contrôles des données saisies sont fait dans l'application, on peut indiquer à l'utilisateur en une seule fois tout ce qui ne va pas afin qu'il corrige tout en bloc et ne soumette le formulaire qu'une seule autre fois. Avec Javascript, on peut même l'informer en temps réel des problèmes avant même qu'il soumette son formulaire renseigné.
Y a t-il une solution pratique pour que les problèmes rencontrés sur le jeu de données fournies à la procédure SQL soient en quelque sorte stockés puis renvoyés en une seule fois à l'application ?
Ce problème rejoint un peu celui que j'avais posé en octobre 2018 quant à l'enchaînement de procédures SQL. J'imagine en effet qu'on pourrait lancer une procédure qui ouvre une transaction et en appelle une à plusieurs autres, le tout n'étant commité que si toutes les procédures secondaires se sont déroulées sans retourner d'erreur. Dans le cas contraire, enregistrement par exemple dans une table d'erreurs ou un fichier de log l'ensemble des problèmes renvoyés puis ROLLBACK et renvoi à l'application d'un résultat d'échec du traitement.
Et là j'ai un peu de mal à voir comment faire... surtout que je travaille avec MySQL, ou à la maison sur un projet personnel avec PostgreSQL.
Partager