WPC 2008
 Cerca nei blog
nov13

Written by:Daniele Lembo
giovedì 13 novembre 2008 17.07 

Gestire SQLDataProvider troppo grandi spesso causa lentezza nello sviluppo. Vediamo come ottimizzare

A chi si trova a sviluppare moduli particolarmente complessi sarà sicuramente capitato di dover gestire file SQLDataProvider, contenenti le logiche di interrogazione della base dati, con una quantità di righe notevole (io ad esempio ho superato le 5000 righe). Ciò comporta lentezza nello sviluppo per due motivi. Da una parte Visual Studio impiega un tempo enorme nelle operazioni di code highlighting e di individuazione di metodi, proprietà e quant'altro. Dall'altra parte i tempi di compilazione aumentano in funzione delle dimensioni dei file.

Per ovviare a questi inconvenienti c'è un modo abbastanza semplice. La struttura del layer dati di DNN prevede una interfaccia, DataProvider.vb, e una classe che la implementa, SQLDataProvider.vb, che contiene le logiche di comunicazione con il database. All'interno del controller (o dei contreller, in base a come viene strutturato il modulo) viengono richiamati i metodi della classe implementativa, e istanziata la classe SQLDataProvider, tramite il metodo DataProvider.Instance().NumeMetodo().

Per separare in più parti il DataProvider basta dunque duplicarlo e dividerlo per aree funzionali. Ad esempio posso prevedere lo stesso livello di separazione che viene adottato per le classi di controller. Dunque so ho un controller dedicato alle funzionalità anagrafiche e uno alle funzionalita generali posso creare due DataProvider, e quindi due SQLDataProvider, che contengono rispettivamente i metodi per gestire a DB le anagrafiche e le funzioni generiche.

Di seguito un esempio di struttura con più DataProvider.

App_Code
........ MyApp
................ DataProvider.vb
................ DataProviderAnagrafiche.vb
................ SQLDataProvider.vb
................ SQLDataProviderAnagrafiche.vb


All'interno dei metodi della classe controller sarà quindi necessario fare la chiamata per istanziare la classe SQLDataProviderAnagrafiche in questo modo:
 

Public Function getObjAnagrafica(ByVal idAnagrafica As Long) _
As Components.Anagrafica
Return CType(CBO.FillObject(DataProviderAnagrafica.Instance() _
.getObjAnagrafica(idAnagrafica ),
GetType(Components.Anagrafica)), _
Components.Anagrafica)
End Function

Tags:
Invia questa pagina ad un amico