这里解释一下,并不是每一个工厂接口创建都必须单独放在一个文件里,完全可以把所有的接口创建放在一个类里,如:
在工厂里创建一个DataAccess抽象类,把所有类的接口创建放在这一个类里就可以:
namespace LiTianPing.DALFactory
{
/// <summary>
/// Abstract Factory pattern to create the DAL。
/// </summary>
public sealed class DataAccess
{
private static readonly string path =
System.Configuration.ConfigurationSettings.AppSettings["DAL"];
public DataAccess()
{ }
#region CreateObject //使用缓存
public static object CreateObject(string path,string CacheKey)
{
object objType = DataCache.GetCache(CacheKey);
if (objType == null)
{
try
{
objType = Assembly.Load(path).CreateInstance(CacheKey);
DataCache.SetCache(CacheKey, objType);// 写入缓存
}
catch//(System.Exception ex)
{
//string str=ex.Message;// 记录错误日志
}
}
return objType;
}
#endregion
#region CreateSysManage 接口
public static DvsLicence.IDAL.ISysManage CreateSysManage()
{
//方式1
//return
(DvsLicence.IDAL.ISysManage)Assembly.Load(path).CreateInstance(path+".SysManage");
//方式2
string CacheKey = path+".SysManage";
object objType=CreateObject(path,CacheKey);
return (ISysManage)objType;
}
#endregion
#region CreateAdIP 接口
public static DvsLicence.IDAL.ADManage.IAdIP CreateAdIP()
{
string CacheKey = path+".ADManage.AdIP";
object objType=CreateObject(path,CacheKey);
return (IAdIP)objType;
}
#endregion
#region CreateAdSupplier
public static DvsLicence.IDAL.ADManage.IAdSupplier
CreateAdSupplier()
{
string CacheKey = path+".ADManage.AdSupplier";
object objType=CreateObject(path,CacheKey);
return (IAdSupplier)objType;
}
#endregion
然后,在业务层BLL里这样调用:
namespace LiTianPing.BLL
{
/// <summary>
/// SysManage 的摘要说明。
/// </summary>
public class SysManage
{
private static readonly ISysManage dal =
DataAccess.CreateSysManage();
public SysManage()
{
}
public int AddTreeNode(SysNode node)
{
return dal.AddTreeNode(node);
}
public void UpdateNode(SysNode node)
{
dal.UpdateNode(node);
}
public void DelTreeNode(int nodeid)
{
dal.DelTreeNode(nodeid);
}
public DataSet GetTreeList(string strWhere)
{
return dal.GetTreeList(strWhere);
}
public SysNode GetNode(int NodeID)
{
return dal.GetNode(NodeID);
}
这样代码会更简洁,减少了许多冗余代码。