je fournirai une réponse basée sur le fichier Lisez-moi d'un constructeur SQL personnalisé ( Dialect )
(le texte en clair suit, les références spécifiques à la bibliothèque ont été supprimées)
Exigences
- Prise en charge de plusieurs fournisseurs de bases de données (par exemple, MySQL, PostgreSQL, SQLite, MS SQL / SQL Server, Oracle, DB2, ..)
- Extension facile à de nouvelles bases de données (de préférence via un paramètre de configuration indépendant de l'implémentation)
- Modularité et transférabilité indépendante de l'implémentation
- API flexible et intuitive
traits
- modèles basés sur la grammaire
- prise en charge des vues personnalisées personnalisées
- abstraction, modularité et transférabilité de db
- modèles préparés
- fuite de données
je pense que les caractéristiques et les exigences ci-dessus esquissent les raisons pour lesquelles on utiliserait un générateur d'abstraction SQL
La plupart des fonctionnalités ci-dessus sont prises en charge par la plupart des constructeurs SQL (bien que je ne pense pas que toutes les listes soient prises en charge, à ma connaissance)
Exemples de cas d'utilisation:
- Plateforme CMS capable de fonctionner (sans changement de code sous-jacent) avec plusieurs fournisseurs de bases de données
- Code d'application personnalisé où le fournisseur de base de données est susceptible de changer et / ou les schémas dB sont dynamiques (cela signifie que de nombreuses requêtes ne peuvent pas être codées en dur mais doivent encore être suffisamment abstraites pour que le code soit robuste aux changements)
- Prototypage avec une autre base de données que celle utilisée en production (nécessiterait une base de code en double au moins pour une partie du code)
- Le code d'application n'est pas étroitement couplé à un fournisseur de base de données spécifique et / ou à une implémentation (même au sein d'un même fournisseur de base de données, par exemple différentes versions de fournisseur de base de données), il est donc plus robuste, flexible et modulaire
- De nombreux cas habituels de requêtes et d'échappements de données sont gérés par le framework lui-même et, généralement, c'est à la fois optimal et plus rapide
Enfin, un exemple de cas d'utilisation que j'avais. je construisais une application où le schéma de base de données sous-jacent (wordpress) n'était pas bien adapté au type de requêtes de données qui devaient être faites, en plus de certaines tables WP (par exemple des publications) devaient être utilisées (donc avoir des tables complètement nouvelles pour toutes les données d'application n'était pas une option).
Dans ce cas, la possibilité de créer une application de type MVC dans laquelle le modèle pourrait être interrogé par des conditions personnalisées / dynamiques a rendu le codage en dur des requêtes presque un cauchemar. Imaginez que vous deviez prendre en charge l'interrogation de 2 à 3 tables avec des jointures et le filtrage des conditions pour voir quelle table associer à quoi et également prendre en charge les alias requis, etc.
De toute évidence, il s'agissait d'un cas d'utilisation d'abstraction de requête et, plus encore, il avait besoin (ou du moins grandement bénéficié) d'avoir la possibilité de définir des vues personnalisées personnalisées (un conglomérat de tables jointes comme s'il s'agissait d'une table personnalisée adaptée au modèle) . Ensuite, c'était beaucoup plus facile, plus propre, modulaire et flexible. Dans un autre aspect, l'application (code) a également utilisé la couche d'abstraction de requête comme outil de normalisation (schéma db) . Comme certains le disent, c'était à l'épreuve du temps .
Si, demain, les gens décident qu'ils ont besoin d'options ou de données supplémentaires, il est très facile d'ajouter cela au modèle en quelques lignes et de bien fonctionner. De plus, si, demain, les gens décident qu'ils ne veulent plus utiliser wordpress (comme l'application est couplée de manière lâche à wordpress en tant que plugin), il est également relativement facile de changer ( juste la définition de) les modèles en quelques lignes de code pour s'adapter au nouveau schéma.
Tu vois ce que je veux dire?