fornecerei uma resposta com base no arquivo leia-me de um construtor SQL personalizado meu ( Dialeto )
(texto simples a seguir, referências específicas da biblioteca removidas)
Exigências
- Suporte a vários fornecedores de banco de dados (por exemplo: MySQL, PostgreSQL, SQLite, MS SQL / SQL Server, Oracle, DB2, ..)
- Ampliado facilmente para novos bancos de dados (de preferência através de uma configuração independente da implementação)
- Modularidade e transferibilidade independente da implementação
- API flexível e intuitiva
Recursos
- modelos baseados em gramática
- suporte a visualizações flexíveis personalizadas
- abstração de db, modularidade e transferibilidade
- modelos preparados
- escape de dados
Eu acho que os recursos e requisitos acima esboçam as razões pelas quais alguém usaria um construtor de abstração SQL
A maioria dos recursos acima é suportada pela maioria dos construtores SQL (embora eu não pense que todos os listados sejam suportados, que eu saiba)
Exemplos de casos de uso:
- Plataforma CMS capaz de funcionar (sem alteração do código subjacente) com vários fornecedores de banco de dados
- Código de aplicativo personalizado, onde o fornecedor do banco de dados está apto a alterar e / ou os esquemas de dB são dinâmicos (isso significa que muitas consultas não podem ser codificadas por código, mas ainda precisam ser abstraídas o suficiente para que o código seja robusto às alterações)
- Prototipagem com outro banco de dados que não seja usado na produção (exigiria uma base de código duplicada pelo menos para parte do código)
- O código do aplicativo não está totalmente acoplado ao provedor e / ou implementação de banco de dados específicos (mesmo dentro do mesmo fornecedor de banco de dados, por exemplo, versões diferentes do fornecedor de banco de dados), portanto, é mais robusto, flexível e modular
- Muitos casos comuns de consultas e escape de dados são tratados pela própria estrutura e, geralmente, isso é ótimo e mais rápido
Finalmente, um exemplo de um caso de uso que eu tinha. Eu estava construindo um aplicativo em que o esquema de banco de dados subjacente (wordpress) não era adequado para o tipo de consulta de dados que precisava ser feita, além de que algumas tabelas WP (por exemplo, postagens) precisavam ser usadas (portanto, tabelas completamente novas para todos os dados do aplicativo não era uma opção).
Nesse caso, ser capaz de criar um aplicativo semelhante ao MVC, onde o modelo poderia ser consultado por condições personalizadas / dinâmicas, tornou a consulta codificada em código quase um pesadelo. Imagine ter que suportar a consulta de talvez de duas a três tabelas com junções e filtrar as condições para ver qual tabela se unir e também cuidar dos aliases necessários e assim por diante.
Claramente, esse era um caso de uso de abstração de consulta e, ainda mais, era necessário (ou pelo menos muito beneficiado) ter a capacidade de definir visualizações flexíveis personalizadas (um conglomerado de tabelas unidas como se fossem uma tabela personalizada adequada para o modelo) . Então ficou muito mais fácil, limpo, modular e flexível. Em outro aspecto, o aplicativo (código) também usou a camada de abstração de consulta como uma ferramenta de normalização (esquema db) . Como alguns dizem, era à prova de futuro .
Se, amanhã, as pessoas decidirem que precisam de algumas opções ou dados extras, é muito fácil adicionar isso ao modelo em algumas linhas e funcionar bem. Além disso, se, amanhã, as pessoas decidirem que não querem mais usar o wordpress (como o aplicativo é fracamente acoplado ao wordpress como um plug-in), também é relativamente fácil alterar ( apenas a definição ) dos modelos em algumas linhas de código para se adaptar ao novo esquema.
Veja o que eu quero dizer?