关于多帐套Database的单例模式,求指点,在线等。
现在是做一个多帐套的进销存系统,每个帐套对应一个独立的数据库。在实例化数据访问对象时,我是想每个帐套对应一个单例。 采用单例模式来构造数据访问对象,但一直觉得设计上有点缺陷,各位有这块经验的请多多指点阿。
我用了两个类,DBFactory和WorkItemCollection.
--------------------编程问答-------------------- 哎,没人回复,自己顶
public class DBFactory
{
private static string _actName;//帐套名
public DBFactory(string actName)
{
_actName = actName;
}
private static WorkItemCollection<Database> collection = new WorkItemCollection<Database>();
private static object lockHelper = new object();
public static Database Instance
{
get
{
var instance = collection.GetWorkItem(_actName);
if (instance == null)
{
lock (lockHelper)
{
if (instance == null)
{
instance = new GenericDatabase("根据帐套获取到的连接字符串", SqlClientFactory.Instance);
collection.Add(instance);
}
}
}
return instance;
}
}
}
public class WorkItemCollection<T> where T : class
{
protected IList<T> items = new List<T>();
/// <summary>
/// 外部获得T类型的入口
/// </summary>
/// <returns></returns>
public virtual T GetWorkItem(string actName)
{
if (items == null || items.Count == 0) return null;
//可能的话返回一个现成实例
foreach (T item in items)
{
return item;
}
return null;//如果没有现成的实例则返回null
}
/// <summary>
/// 添加一个实例
/// </summary>
/// <param name="item"></param>
public virtual void Add(T item)
{
if (item == null) throw new ArgumentNullException("item is null");
items.Add(item);
}
}
补充:.NET技术 , C#