Quand vous en avez fini avec tous les getters et setters, le moment est venu de mettre (ajouter ou mettre à jour) les données dans la base de données ou de les en enlever.
Ajouter les données dans la base ou les supprimer
Les sous-procédures put et delete appellent une sous-procédure interne—putInstance() in FILE00A—qui se charge du traitement des exceptions/erreurs (par exemple, violations des contraintes, écritures en double). Donc, tout le traitement des exceptions/erreurs pour toute la base de données a été encapsulé dans un seul endroit.
putInstance() a effectué un rétro-appel vers la sous-procédure putRow(), qui exécute vraiment write/update/delete. putRow() est inclus dans le membre copy pFileStd.
La figure 10 montre la définition des sous-procédures put_Product(), delete_Product() et putRow(). Dans la sous-procédure put-Product(), notez l’appel vers validData() (figure 6) avant de tenter de le mettre dans la base de données.
Générateur
Après avoir écrit deux ou trois de ces modules de fichiers, il est clair que, à part les getters et les setters, le gros du travail consiste à trouver et remplacer : ce qui conduit logiquement au concept d’un générateur de code.
À propos des générateurs de code, je me suis toujours posé la question, « Jusqu’où aller ? » La solution que je présente ici génère tout ce qui a été décrit précédemment. Mais il vous reste encore à coder le contenu des sous-procédures validData() et setDefaults() et il vous faudra peut-être modifier les sous-procédures SQL list éventuellement générées (selon la complexité qu’exige l’instruction SQL).
Au moment où j’écris ces lignes, l’interface pour le générateur a été codée en utilisant CGIDEV2, mais, dans un futur pas trop éloigné, j’espère écrire une interface PHP correspondante.
Pour commencer, il vous faut un ou plusieurs modèles. Un modèle contient la structure de base d’un module d’externalisation contenant les mots-clés imbriqués spéciaux qui seront scannés et remplacés par le générateur (par exemple, le générateur remplacera toutes les occurrences de la valeur #&#&KEYTOSTORE&#&# par le code servant à copier la valeur des champs clés de la structure de données key dans l’image stockée).
La figure 11 montre la phase de sélection initiale pour le générateur. Les points principaux sont les suivants :
• Générer les routines pour la base de données. Identifier la base de données à utiliser dans le module d’externalisation. Le nom de l’auteur est là pour la documentation.
• Générer les membres source. Identifier le module d’externalisation et son membre prototype correspondant. Autre possibilité : avoir une directive include, pour le membre prototype généré, ajoutée à un membre include pour le programme de service.
• Espaces utilisateur. Le nom fourni pour l’espace utilisateur entraînera la création de deux espaces utilisateur : un pour les handles (HD ajoutés) et un pour les données (DT ajoutées).
• Options. Spécifier le modèle à utiliser. Indiquer si des quick getters doivent être générés. Indiquer si des external getters doivent être générés. Les external getters s’appliquent aux column getters et renvoient la valeur demandée comme un paramètre au lieu d’une valeur de renvoi. Cela afin que les procédures puissent être appelées à partir de Java et PHP.
Les figures 12A, 12B, 12C et 12D montrent les autres options de sélection après qu’un fichier ou index ait été sélectionné. Des onglets séparés permettent la sélection de :
• Base Data. Identifier le nom utilisé pour les sous-procédures, pour instancier, placer, supprimer et libérer un élément.
• Getter/Setter. Sélectionner les colonnes pour la génération des getters et setters. Vous pouvez changer le nom des sous-procédures (le nom affiché issu de la description de colonne).
• DS Getter/Setter. Spécifier les formats à utiliser pour les getters et/ou setters et identifier les colonnes à inclure dans le format. Il est également possible de passer toutes les données comme des données caractères, une option intéressante dans un environnement web. Les routines générées vérifieront automatiquement les éventuelles erreurs de casting lors de la recopie des données dans leur format d’origine.
• SQL Select List. Spécifier les formats à utiliser dans l’extraction d’une liste de données au moyen d’une instruction SQL imbriquée.
L’onglet Finish vous permet de générer les membres source. Bien que vous ayez à présent un membre qui doit être compilé, n’oubliez pas qu’il vous faudra peut-être encore : apporter des changements aux sous-procédures validData() et setDefaults(), apporter des changements à SQL imbriqué, ou ajouter des colonnes non-base de données à certains des formats (en même temps que les changements correspondants aux éventuels getters et/ou setters).
Maintenance et contrôle de la base de données facilités
Et voilà. Dès lors que les applications multiniveaux se banalisent sur notre plate-forme, et que les choix d’interfaces se multiplient, cette approche me semble efficace pour contrôler l’accès à une base de données et pour la maintenir. J’espère que vous constaterez la même chose. Bonne et heureuse génération !
Les figures et illustrations de cet article sont accessibles via le Club Abonnés.
Téléchargez cette ressource
Comment lutter contre le Phishing ?
Dans un environnement cyber en constante mutation, le phishing évolue vers des attaques toujours plus sophistiquées combinant IA, automatisation et industrialisation. Une réalité complexe qui exige des mesures de sécurité avancées et repensées au-delà de l’authentification multifacteur. Découvrez les réponses technologiques préconisées par les experts Eviden et les perspectives associées à leur mise en œuvre.