1.1.1  抽象工厂封装数据操作类实例创建,然后DBSession调用抽象工厂,修改DBSession

CZBK.ItcastOA.DALFactory数据会话层调数据层不能直接new,要封装一下解耦

ASP.Net MVC OA项目笔记<五>-LMLPHP

1.2.1 CZBK.ItcastOA.DALFactory 新增抽象工厂类  AbstractFactory

1.2.2 Web.config中配置一下配置信息(数据层的程序集和命名空间)

<!--配置程序集名称和命名空间名称-->
<add key="AssemblyPath" value="CZBK.ItcastOA.DAL" />
<add key="NameSpace" value="CZBK.ItcastOA.DAL" />

ASP.Net MVC OA项目笔记&lt;五&gt;-LMLPHP

1.2.3 引入 System.configuration,因为要读取配置信息

ASP.Net MVC OA项目笔记&lt;五&gt;-LMLPHP

1.2.4 抽象工厂类 AbstractFactory代码

  /// <summary>
/// 通过反射的形式创建类的实例
/// </summary>
public class AbstractFactory
{
//读取配置的程序集和命名空间
private static readonly string AssemblyPath = ConfigurationManager.AppSettings["AssemblyPath"];
private static readonly string NameSpace = ConfigurationManager.AppSettings["NameSpace"]; public static IUserInfoDal CreateUserInfoDal()
{
string fullClassName = NameSpace + ".UserInfoDal";
return CreateInStance(fullClassName) as IUserInfoDal;//把反射封装在这个方法里
}
private static object CreateInStance(string className)
{
//加载程序集
var assembly = Assembly.Load(AssemblyPath);
return assembly.CreateInstance(className);
}
}

1.2.5 通过抽象工厂封装了类的实例的创建

ASP.Net MVC OA项目笔记&lt;五&gt;-LMLPHP

1.2.6 这样就完全解耦了,以后不管换成什么DAL,只要更改配置文件就行

1.3.1 各个会话层都是通过接口来调用,所以数据会话层也需要一个接口

面向接口编程,通过这种方式来解耦

IDAL添加一个接口IDBSession

首先IDAL也要引用一下EF,通过添加实体数据模型引用

 /// <summary>
/// 业务层调用的是数据会话层的接口
/// </summary>
public interface IDBSession
{
DbContext Db { get; }
IUserInfoDal UserInfoDal { get; set; }
bool SaveChanges(); }

1.3.2 让DBSession继承IDBSession

ASP.Net MVC OA项目笔记&lt;五&gt;-LMLPHP

 /// <summary>
/// 1.数据会话层:就是一个工厂类,负责完成所有数据操作类实例的创建,然后业务层通过数据会话层来获取要操作数据类的实例,
/// 所以数据会话层将业务层和数据层解耦。
/// 2.在数据会话层中提供一个方法:完成所有数据的保存。
/// </summary>
public class DBSession:IDBSession
{
//OAEntities Db = new OAEntities();
public DbContext Db
{
get
{
return DBContextFactory.CreateDbContext();
}
} private IUserInfoDal _UserInfoDal;
public IUserInfoDal UserInfoDal
{
get
{
if(_UserInfoDal==null)
{
//_UserInfoDal= new UserInfoDal();
//通过抽象工厂封装了类的实例的创建
_UserInfoDal = AbstractFactory.CreateUserInfoDal();
}
return _UserInfoDal;
}
set
{
_UserInfoDal = value;
}
} /// <summary>
/// 一个业务中经常涉及到对多张表的操作,我们希望连接一次数据库,完成对这张表数据的操作,提高性能
/// 工作单元模式
/// </summary>
/// <returns></returns>
public bool SaveChanges()
{
return Db.SaveChanges() > ;
}
}
05-08 15:39