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...
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
- Chi si ricorda dei DataSet?, l'8 ottobre 2008 alle 22:04
- Caching nel DataLayer, il 29 gennaio 2007 alle 19:49
- Collection generiche come proprietà, il 9 ottobre 2006 alle 00:51
- Come mi piace implementare il pattern Identity Map, il 17 settembre 2006 alle 13:24
- I pattern che uso in genere, il 25 gennaio 2006 alle 00:38