Factory Pattern e Generics per l'astrazione dal db

Non c'è dubbio che una delle tecniche migliori, anzi la migliore, per ottenere un'astrazione dalla base dati è implementare un Factory Pattern. Con la versione 1.x del framework, siamo obbligati a creare un metodo per ogni classe del DataLayer che dobbiamo istanziare, quindi se abbiamo 50 classi di datalayer, ci sara una classe con 50 metodi, o 50 classi con un metodo. Se si vuole risparmiare, si fa un metodo che accetta l'interfaccia che la classe da creare implementa (passandola come object) e che poi torna la classe come object. Lo svantaggio sta nel fatto di perdere la tipizzazione. Tutto questo perchè nella versione 1.x non possiamo definire dinamicamente il tipo di ritorno di una funzione.

Ecco che l'introduzione dei Generics nella versione 2.0 migliora drasticamente il codice. Nei miei progetti ho un file di configurazione che mappa le interfacce con la classe reale e con l'assembly che la contiene (a volte ho un datalayer spalmato in diversi assembly per particolari esigenze) e altre informazioni. A questo punto mi basta invocare il metodo GetClass della classe Factory specificando l'interfaccia come Generic. Leggendo il file di configurazione viene trovata la classe associata, viene istanziata e tornata ottenendo così lo strong typing caratteristico dei Generics.

internal static T GetClass<T>()
{
XmlDocument d = new XmlDocument();
d.Load("d:\\MyApp\\db.config");
string interfaceName = typeof(T).FullName;
foreach (XmlNode n in d.SelectNodes("Maps/Map"))
{
if (n.Attributes["interface"].Value == interfaceName)
{
Type type = Type.GetType(n.Attributes["class"].Value);
object o = Activator.CreateInstance(type, true);
return (T)o;
}
}

throw new DALException("Interface not found in the mapper file");
}
}

Il metodo non è nella sua versione completa, ma è comunque una base di partenza.

Stay tuned...

Nella stessa categoria

Commenti

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.

© 1998-2008 - SMWorld.NET - Il blog di Stefano Mostarda

TagCloud
BLOG INFO
  • Post: 125
  • Commenti: 83
  • TrackBacks: 19
  • Feed blog e contenuti tecnici: RSS
  • Feed blog: RSS Atom OPML

MVP
CATEGORIE
I PIÙ LETTI DEL MESE
IN EVIDENZA