Refactoriser la couche Database et établir l'infrastructure d'accès aux données. #26
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Titre
Refactoriser la couche Database et établir l'infrastructure d'accès aux données.
Objectif
Mettre en place l'architecture définitive de la couche Database afin de fournir
une API interne homogène pour tous les futurs modules métier.
Ce ticket ne comprend aucun CRUD métier.
Son objectif est uniquement de construire les fondations techniques qui seront
réutilisées par l'ensemble de l'application.
Motivations
À terme, Labfy Investigation manipulera de nombreux objets métier :
Sans une couche d'abstraction, chaque module devrait manipuler directement
SQLite, ce qui entraînerait :
L'objectif de ce ticket est d'éviter cette dette technique.
Architecture cible
La couche Database devra évoluer vers l'organisation suivante :
Les futurs modules métier seront ajoutés ultérieurement.
Structure Database
Créer un type opaque :
L'implémentation reste privée.
La structure interne contiendra au minimum :
sqlite3 *;Cette abstraction permettra de faire évoluer facilement l'implémentation sans
modifier l'API publique.
Connexion
Créer les fonctions :
Ces fonctions sont responsables de :
Transactions
Créer les fonctions :
Toute gestion des transactions devra passer exclusivement par ces fonctions.
Gestion des requêtes préparées
Créer une couche d'abstraction pour les instructions préparées.
L'objectif est de centraliser :
sqlite3_prepare_v2()sqlite3_bind_*()sqlite3_step()sqlite3_reset()sqlite3_finalize()Aucun futur module métier ne devra appeler directement ces fonctions SQLite.
Gestion des erreurs
Créer un point d'entrée unique pour les erreurs SQLite.
Toutes les erreurs devront passer par une fonction dédiée.
Cette centralisation facilitera :
Responsabilités
À la fin du ticket :
sqlite3;Hors périmètre
Ce ticket ne doit pas :
Critères d'acceptation
Database.sqlite3en dehors du dossierdatabase.Commit attendu