[英]Database factory class design
嗨,我有此類來實例化DAL類:
public class Factory
{
public static T GetInstance<T>() where T : new()
{
return new T();
}
}
我想使我的應用程序能夠使用多個數據庫。 我打算在web.config中設置數據庫,然后將該設置傳遞給可能返回正確DAL類的工廠類。 我認為我的方法還可以,只是在保持通用性的同時,還停留在如何實現它上。
也許是這樣的:
public class Factory
{
private static readonly string dbType = ConfigurationSettings.Appsettings["SqlServer"];
public static T GetInstance<T>() where T : new()
{
switch(dbType)
{
case "SqlServer":
return new T(); //Not sure what to put here.
break;
case: "MySql":
return new T();
break;
default: "No datasource";
}
}
}
如果有人可以幫助或指出正確的方向,那將是很好的。
提前致謝。
不要在GetInstance()
方法上使用泛型。 讓您的所有數據訪問類都實現一個接口,並將該接口作為函數的返回值。
public class Factory
{
private static readonly string dbType = ConfigurationSettings.Appsettings["SqlServer"];
public static IDataAccess GetInstance()
{
switch(dbType)
{
case "SqlServer":
return new SqlServerDataAccess(); //SqlServerDataAccess should implement IDataAccess
break;
case: "MySql":
return new MySqlDataAccess(); //MySqlDataAccess should implement IDataAccess
break;
default: "No datasource";
}
}
}
接口與實現分開!
您應該查看System.Data.Common命名空間。 該名稱空間使用DbConnection,DbReader等結構,並且本身使用工廠方法擴展所需的DbProvider。
因此,我建議不要讓當前的.net數據框架為您效勞,而不是沿着當前的道路走下去。 這是一個簡單的例子。
DbProviderFactory m_factory = DbProviderFactories.GetFactory("System.Data.SqlClient");
DbConnection m_connection = m_factory.CreateConnection();
m_connection.ConnectionString = _connstrbldr.ConnectionString;
m_connection.Open();
using (DbCommand cmd = m_connection.CreateCommand())
{
cmd.CommandType = CommandType.Text;
cmd.CommandText = "";
cmd.ExecuteNonQuery();
}
GetFactory調用可以接受安裝在計算機上的任何提供程序,Oracle,MySql,Sql等。您還可以通過調用靜態DataTable GetFactoryClasses()來獲取安裝在計算機上的所有提供程序,這將返回一個數據表對象。
其背后的想法是避免提供程序特定的實現,而依賴於可滿足您所有需求的通用實現。
希望對您有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.