接下来,我们就要到业务逻辑层了,简单的说,业务逻辑层就是调用Repository(可以看做是DAL数据库访问层)
先来看看项目的架构
我们现在就开始来做BLL层. 同样,先编写 UserInfoService ,这个就是调用 UserInfoRepository
先添加对项目的引用,Model层,IRepository(数据库访问层的接口),Repository(数据库访问层),由于我们的Model是使用EF的,那么还需要引用System.Data.Entity
我们先来编写 UserInfoService.cs 直接调用 DbSession下的UserInfoRepository仓储就可以了
namespace YouJiao.MvcWeb.BLL { public class UserInfoService { public IDbSession DbSession { get { return new DbSession();} } public IList<UserInfo> LoadEneities(Func<UserInfo, bool> whereLambda) { return DbSession.UserInfoRepository.LoadEneities(whereLambda); } } }
这里只是写了一个,我们可以发现 既然 UserInfoService要写这么多,那么在ProductService里面也要写这么多,于是我们也抽象出一个 BaseService出来
namespace YouJiao.MvcWeb.BLL { public abstract class BaseService<T> where T : class ,new() { public IDbSession DbSession { get { return new DbSession();// 暂时先这么写,一会再处理这里的实例管理 } } public BaseService() { SetCurrentRepository(); } public IBaseRepository<T> CurrentRepository { get; set; } public abstract void SetCurrentRepository();//抽象方法,作用是设置当前仓储 public IList<T> LoadEneities(Func<T, bool> whereLambda) { //return DbSession.UserInfoRepository.LoadEneities(whereLambda); //这里要怎么写? return CurrentRepository.LoadEneities(whereLambda); //我们设置一个当前仓储的属性为 CurrentRepository } } }
然后是 UserInfoService 继承自 BaseService
namespace YouJiao.MvcWeb.BLL { public class UserInfoService : BaseService<UserInfo> { public override void SetCurrentRepository() { this.CurrentRepository = this.DbSession.UserInfoRepository; // 这里的this是表示,这个是从基类里面集成来的 } } }
接着我们对DbSession进行一个实例的管理 DbSessionFactory