标签:
工作一年多,自己小小的心得,方便自己以后查找。
首先上架构截图:
且看截图,其中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中配置项就可以即可。
自己在项目中的学习总结:利用工厂模式+反射机制+缓存机制,实现动态创建不同的数据层对象接口
标签:
原文地址:http://www.cnblogs.com/laoyuanroom/p/4717221.html