Dove dovrebbero essere incapsulate le query SQL / DB in un sistema software?

2

Scrivo spesso piccole applicazioni (basate sul Web o in altro modo) che richiedono un uso intensivo del database. Ho provato vari modi di gestire dove mettere le query sql reali (una sorta di sistemi ORM ad hoc). Questi includono:

  • Modelli che si costruiscono da soli e consentono solo a SQL di essere all'interno di un modello.

  • Una sorta di metodo in stile factory in cui i modelli sono creati da una classe factory a cui è consentito conoscere SQL.

  • Una terza entità che mappa i modelli in base ai loro campi / chiavi nel database e genera Codice SQL al volo basato su questo.

C'è una conoscenza comune di quale metodo sia il migliore? O un altro modo in cui mi sono perso?

Chiaramente molto sarà basato sul contesto del sistema stesso, che per me è solitamente quello di produrre strumenti leggeri o framework di utilità. Nella sperimentazione, non ho mai trovato nessuno di loro che si sentisse intuitivamente "giusto" e non goffo, ma non voglio nemmeno andare a un framework completo come Django o Ruby - sia perché gli strumenti che creo sono in una varietà di lingue e perché di solito non garantiscono quel livello di impronta circostante.

    
posta Stephen Bennet 02.04.2012 - 17:54
fonte

2 risposte

2

Ti consiglierei di implementare il schema del gateway . Fornisce un buon livello di astrazione dal codice (modelli ect) e dal tuo SQL.

I've never found any of them that feel intuitively "right" and not clunky, but I also do not want to go for a full framework such as Django or Ruby - both because the tools I create are in a variety of languages and because they usually do not warrant that level of surrounding footprint.

Sai di più sui requisiti dei tuoi progetti rispetto a me (quindi sentiti libero di ignorarmi) ma non trovo molto convincenti i tuoi argomenti per implementare il tuo sistema. Avete effettivamente confrontato i tempi di risposta del vostro sistema con una struttura ben consolidata? I framework stabiliti hanno avuto molti programmatori molto abili per ottimizzarli. Hai davvero bisogno di prestazioni extra (supponendo che ce ne siano?).

Inoltre, sono un po 'incerto su quale vantaggio possa avere il tuo sistema in una varietà di lingue. Sembra una ricetta per il codice buggy complesso.

    
risposta data 02.04.2012 - 18:42
fonte
0

Dipende molto dalla tecnologia attuale che stai utilizzando perché determina il set di strumenti e le migliori pratiche che otterrai.

Ad esempio se lavori in Java puoi usare uno o più file di proprietà e memorizzare tutte le query lì, questo ha il vantaggio di non averli ovunque nel tuo codice e non hai bisogno di ricompilare per apportare modifiche (è anche possibile reimplementare la classe delle proprietà e fare in modo che cerchi le modifiche nel file e ricaricare se qualcosa è diverso che aggiunge la flessibilità in cui è possibile modificare le query senza ridistribuire l'app). Ma ha il rovescio della medaglia che le query sono esposte in chiaro sul server in modo che questo possa essere considerato un difetto di sicurezza (facilmente risolvibile comprando reimplementare ancora una volta il file delle proprietà per leggere i file crittografati). Questo può essere applicato anche se si utilizza PHP o ASP .NET. o C #.

Ma se lavori con Java ma, per esempio, usando Spring Framework puoi avere le query definite come una mappa in un file di configurazione di primavera (XML), o in un bean definito in un file di configurazione.

  • Pro; è elegante e flessibile,
  • Contro; Considerazioni sulla sicurezza di avere, ancora una volta, domande in chiaro che si trovano intorno ...

Quindi, come puoi vedere, le opzioni sono abbastanza numerose limitate solo dalla tecnologia che stai utilizzando.

    
risposta data 02.04.2012 - 18:37
fonte

Leggi altre domande sui tag