Dove dovrebbe memorizzare un'applicazione conforme a JDBC le sue istruzioni SQL e perché?
Finora sono riuscito a identificare queste opzioni:
- Hardcoded negli oggetti business
- Incorporato nelle clausole SQLJ
- Incapsula in classi separate, ad esempio oggetti di accesso ai dati
- Basato sui metadati (separa lo schema dell'oggetto dallo schema dei dati - descrivi le mappature tra di loro nei metadati)
- File esterni (ad esempio Proprietà o File di risorse)
- Procedura di archiviazione
Quali sono i "pro" e i "contro" per ciascuno di essi?
Il codice SQL dovrebbe essere considerato "codice" o "metadati"?
Le stored procedure devono essere utilizzate solo per l'ottimizzazione delle prestazioni o sono un'astrazione legittima della struttura del database?
La performance è un fattore chiave nella decisione? E il blocco del fornitore ?
Cosa c'è di meglio: accoppiamento lento o accoppiamento stretto e perché?
MODIFICATO: Grazie a tutti per le risposte - ecco un riassunto:
Metadata driven ie Object Relational Mappings (ORM)
Professionisti:
- Molto astratto: il server DB può essere cambiato senza la necessità di cambiare il modello
- Diffuso - praticamente uno standard
- Riduce la quantità di SQL necessaria
- Può memorizzare SQL in file di risorse
- Le prestazioni sono (di solito) accettabili
- Approccio basato sui metadati
- (Database) indipendenza dal fornitore
Contro:
- Nasconde SQL e le vere intenzioni degli sviluppatori
- SQL difficile da rivedere / modificare da DBA
- SQL potrebbe essere ancora necessario per i casi dispari
- Può forzare l'uso di un linguaggio di query proprietario, ad esempio HQL
- Non si presta all'ottimizzazione (astrazione)
- Può mancare di integrità referenziale
- Sostituisce la mancanza di conoscenza SQL o la mancanza di attenzione al codice nel DB
- Non abbinare mai le prestazioni del database nativo (anche se si avvicina)
- Il codice del modello è molto stretto accoppiato con il modello del database
Hardcoded / incapsulato nello strato DAO
Professionisti:
- SQL viene mantenuto negli oggetti che accedono ai dati (incapsulamento)
- SQL è facile da scrivere (velocità di sviluppo)
- SQL è facile da rintracciare quando sono necessarie modifiche
- Soluzione semplice (nessuna architettura disordinata)
Contro:
- SQL non può essere rivisto / modificato da DBA
- È probabile che SQL diventi specifico del DB
- SQL può diventare difficile da mantenere
Procedura di archiviazione
Professionisti:
- SQL conservato nel database (vicino ai dati)
- SQL viene analizzato, compilato e ottimizzato dal DBMS
- SQL è facile da rivedere / modificare per DBA
- Riduce il traffico di rete
- Maggiore sicurezza
Contro:
- SQL è legato al database (blocco del fornitore)
- Il codice SQL è più difficile da mantenere
File esterni (ad esempio Proprietà o File di risorse)
Professionisti
- SQL può essere modificato senza dover ricostruire l'applicazione
- Disaccoppia la logica SQL dalla logica di business dell'applicazione
- Repository centrale di tutte le istruzioni SQL - più facile da mantenere
- Più facile da capire
Contro:
- Il codice SQL può diventare non gestibile
- Più difficile controllare il codice SQL per errori (sintattici)
Incorporato nelle clausole SQLJ
Professionisti:
- Migliore controllo della sintassi
Contro:
- Si lega troppo strettamente a Java
- Prestazioni inferiori rispetto a JDBC
- Mancanza di query dinamiche
- Non così popolare