您的位置:首页 > 其它

自己在项目中的学习总结:利用工厂模式+反射机制+缓存机制,实现动态创建不同的数据层对象接口

2015-08-10 10:18 1126 查看
工作一年多,自己小小的心得,方便自己以后查找。
首先上架构截图:



且看截图,其中DALFactory为工厂类库,IDAL为接口类库,SQLServerDAL则为实际的数据层实现类库。

1、数据层实现。这个不多说,起始就是编写相关数据操作的方法。

public partial class ActivityInfo:IActivityInfo

{

public int Add(ActivityInfo model)

{

reutrn 1;

}

}

2、IDAL接口

public interface IActivityInfo

{

int Add(ActivityInfo model);

}
3、重点:DALFactory为工厂类库。工厂方法 反射 缓存

直接上代码,简单易懂:

类库中的基类:

/// <summary>
/// Abstract Factory base class
/// </summary>
public class DataAccessBase
{

protected static readonly string AssemblyPath = ConfigHelper.GetConfigString("DAL");

#region CreateObject

//不使用缓存
protected static object CreateObjectNoCache(string AssemblyPath, string classNamespace)
{
try
{
object objType = Assembly.Load(AssemblyPath).CreateInstance(classNamespace);
return objType;
}
catch//(System.Exception ex)
{
//string str=ex.Message;// 记录错误日志
return null;
}

}
//使用缓存
protected static object CreateObject(string AssemblyPath, string classNamespace)
{
object objType = DataCache.GetCache(classNamespace);
if (objType == null)
{
try
{
objType = Assembly.Load(AssemblyPath).CreateInstance(classNamespace);
DataCache.SetCache(classNamespace, objType);// 写入缓存
}
catch//(System.Exception ex)
{
//string str=ex.Message;// 记录错误日志
}
}
return objType;
}
#endregion

}

映射实现:

public sealed class DAJLT : DataAccessBase
{

/// <summary>
/// 创建UserAttendance数据层接口。考勤信息表
/// </summary>
public static IUserAttendance CreateUserAttendance()
{
string ClassNamespace = AssemblyPath + ".JLT.UserAttendance";
object objType = CreateObject(AssemblyPath, ClassNamespace);
return (IUserAttendance)objType;
}

}

4、BLL层的数据层方法调用:

public partial class Supplier

{

private readonly ISupplierAD dal = DAShopSupplier.CreateSupplierAD();

/// <summary>
/// 是否存在该记录
/// </summary>
public bool Exists(int AdvertisementId)
{
return dal.Exists(AdvertisementId);
}

}

此后如果更换数据库,新增一个数据层类库,只是替换webconfig中配置项就可以即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: