fornirò una risposta basata sul file readme di un mio builder SQL personalizzato ( Dialect )
(testo in chiaro segue, rimossi riferimenti specifici della libreria)
Requisiti
- Supporto di più fornitori di database DB (ad esempio MySQL, PostgreSQL, SQLite, MS SQL / SQL Server, Oracle, DB2, ..)
- Esteso facilmente ai nuovi DB (preferibilmente attraverso un'impostazione di configurazione indipendente dall'implementazione)
- Modularità e trasferibilità indipendente dall'implementazione
- API flessibile e intuitiva
Caratteristiche
- modelli basati sulla grammatica
- supporto di viste personalizzate personalizzate
- db astrazione, modularità e trasferibilità
- modelli preparati
- dati che escaping
Penso che le caratteristiche e i requisiti precedenti descrivano i motivi per cui si userebbe un builder di astrazione SQL
La maggior parte delle funzionalità di cui sopra sono supportate dalla maggior parte dei builder SQL (anche se non penso che tutti i listati siano supportati, per quanto ne so)
Esempi di casi d'uso:
- Piattaforma CMS in grado di funzionare (senza modifiche del codice sottostante) con più fornitori di DB
- Codice di applicazione personalizzato in cui il produttore di DB è in grado di cambiare e / o gli schemi di dB sono dinamici (questo significa che molte query non possono essere codificate, ma devono ancora essere sufficientemente astratte in modo che il codice sia solido alle modifiche)
- Prototipazione con un altro DB rispetto a quello utilizzato in produzione (richiederebbe una base di codice duplicata almeno per alcuni del codice)
- Il codice dell'applicazione è non strettamente accoppiato a specifici provider di DB e / o implementazione (anche all'interno dello stesso fornitore di DB, ad esempio diverse versioni di DB vendor), quindi è più robusto, flessibile e modulare
- Molti casi consueti di query e di escape dei dati sono gestiti dal framework stesso e solitamente questo è sia ottimale che più veloce
Finalmente, un esempio di un caso d'uso che avevo. Stavo costruendo un'applicazione in cui lo schema DB sottostante (wordpress) non era adatto per il tipo di query di dati che dovevano essere fatte, più alcune delle tabelle WP (ad esempio i post) dovevano essere utilizzate (quindi avere tabelle completamente nuove per tutti i dati dell'applicazione non era un'opzione).
In tal caso, essere in grado di creare un'applicazione simile a MVC in cui il modello potrebbe essere interrogato da condizioni personalizzate / dinamiche, rende la query codifica hard quasi un incubo. Immagina di dover supportare l'interrogazione di un massimo di 2-3 tabelle con join e di filtrare le condizioni per vedere quale tabella aggiungere a cosa e prendersi cura anche degli alias richiesti e così via.
Chiaramente questo era un caso d'uso di astrazione della query e, ancora di più, aveva bisogno (o almeno di grande beneficio) di avere una capacità di definire viste morbide personalizzate (un conglomerato di tabelle unite come se erano un tavolo personalizzato adatto al modello). Quindi è stato molto più semplice, pulito, modulare e flessibile. In un altro aspetto, l'applicazione (codice) ha anche utilizzato il livello di astrazione della query come strumento (schema db) . Come alcuni dicono, era a prova di futuro .
Se, domani, le persone decideranno di aver bisogno di alcune opzioni o dati extra, è molto facile aggiungerli al modello in un paio di righe e lavorare bene. Addizionalmente, se, al più tardi, le persone decidono che non vogliono più usare wordpress (dato che l'applicazione è liberamente accoppiata a wordpress come un plugin), è anche relativamente facile da cambiare ( solo la definizione di ) i modelli in un paio di righe di codice per adattarsi al nuovo schema.
Vedi cosa intendo?