Mi sembra molto carina la possibilità di utilizzare i Generics con la factory dei DAL.
Invece di avere GetCustomerDAL(), GetOrderDAL() ecc.. si può utilizzare (e soprattutto scrivere) una sola funzione più o meno come la seguente:
public static T GetDAL<T>(string entityName)
{
string dalProviderName = "NH"; //Get from config...
System.Reflection.Assembly dalAssembly = System.Reflection.Assembly.GetExecutingAssembly(); //The assembly that contains specific DAL implementations
return (T)dalAssembly.CreateInstance(string.Format("MyFullNamespace.DAL.{0}.{1}DAL", dalProviderName, entityName));
}
da utilizzare più o meno così:
DAL.ICustomerDAL dal = DAL.DALFactory.GetDAL<DAL.ICustomerDAL>("Customer");
E' sicuramente da mettere un po' a posto ma il punto di partenza mi sembra carino...