10 messaggi dal 04 settembre 2001
Ciao a tutti,
devo iniziare lo sviluppo di un'applicazione web in asp.net e volevo un consiglio sull'approccio alla base dati più ottimale tenendo conto delle seguenti problematiche:
Per un fattore di scalabilità, è consigliabile aprire e chiudere le connessioni al db ad ogni pagina, inserire un oggetto di connessione in una variabile di sessione o inserire un oggetto di connessione in una variabile application?
Volendo tenermi aperta la strada per una sorgente dati di tipo dinamico e quindi, in un futuro, sostituire l'attuale base dati con driver nativo mssql con un driver nativo oracle per ado.net piuttosto che un'altro driver, come posso fare per riuscire a organizzare il codice in modo che la migrazione sia il più indolore possibile?

Grazie in anticipo del supporto.
Ciao e buon lavoro
per la prima domanda:
usare la cache.
più che la connessione è meglio inserire il risultato delle varie query in cache, in modo da limitare il numero di richeste fatte al db server.

per avere un alto livello di astrazione, definisci un interfaccia che verrà implementata dalle tue varie classi di accesso ai dati, il tier business accederà ai dati attravrso l'interfaccia ignorando l'implementazione.

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
130 messaggi dal 26 agosto 2004
non hai bisogno di fare il caching delle connessioni, perche gia lo fa il framework. quindi in generale apri una connessione e chiudila, anzi se non la chiudi rischi di peggioriare le cose perche il framework non puo usare la connessione in quanto non ancora chiusa.
per puanto riguarda db diversi, penso che l' unico modo è scrivere dell' sql il piu standard possibile, e parametrizzare la stringa di connessione, es. mettendola in un file xml (questo è il mio approccio). cosi, se cambi stirnga di connessione, la modifica è vista in tutte le pagine..spero di essermi spiegato!

Stefano M.
10 messaggi dal 04 settembre 2001
Ciao, grazie della risposta,
purtroppo sono nuovo del linguaggio e vorrei,se non arreco troppo disturbo, un'ulteriore delucidazione sulla parte di astrazione sul database e sulla creazione dell'interfaccia.

Grazie mille. Ciao.
L'uso della cache va fatto nell'ambito di informazioni che cambiano raramente e per le quali conviene utilizzare un buffer temporaneo per memorizzarle al fine di evitare accessi al db di fatto inutili.

Per dati che cambiano in continuazione il discorso cache non è applicabile.

Usa i DataReader piuttosto che i DataSet se ti interessano soprattutto le performance. Se usi C# utilizza il costrutto using per aprire le connessioni.

In ogni caso le connessioni sono risorse preziose, pertanto vanno usate per il solo tempo in cui servono e poi vanno subito rilasciate. Anche se esiste un meccanismo di pooling sulle connessioni, non è buona cosa persistere per tanto tempo una connessione.

Una volta aperta una connessione, va lanciato il comando e poi la connessione va subito chiusa.

Per quanto riguarda il secondo discorso sull'indipendenza dal DBMS, puoi sfruttare l'astrazione (pattern abstract factory). Un esempio già disponibile (scaricabile e gratuito) di quello che chiedi è il Data Access Application Block.

Ciao, Ricky.

Ing. Riccardo Golia
Microsoft MVP ASP.NET/IIS
ASPItalia.com Content Manager
http://blogs.aspitalia.com/rickyvr
http://ricky.aspitalia.com
http://www.riccardogolia.it
ti faccio una breve paronamica in genere adotto (o cerco di adottare) il seguente approccio

definisco un ineterfaccia (vedi la documentazione in merito al linguaggio che stai utilizzando)
che definisce metodi , propieta e eventi (e quanto altro) possa sembrarmi utile per accedre ai dati

definisco un altra interfaccia che restituisce, tramite un metodo (Chiamiamolo DataFactory), l'istanza di una classe che implemente l'interfaccia di accesso ai dati

dopodiche passo all'implementazione dell'interfacce, la mia logica business istanzierà la classe che definisce il metodo DataFactory richimandolo otterrò un istanza di una classe che implementa l'interfaccia di accesso ai dati, e tramite questa farò le mie operazioni.

p.s. questo è in maniera molto semplificata quello che ti ha conisgliato richy, o meglio io ti ho descritto il pattern Factory Method

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
10 messaggi dal 04 settembre 2001
Grazie mille a tutti per gli utili consigli, ora passerò un po' di tempo sulla documentazione di questo DataAccess Application Block ...

Ciao e buon lavoro.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.