MVC+Ef项目(4) 抽象业务逻辑层BLL层

接下来,我们就要到业务逻辑层了,简单的说,业务逻辑层就是调用Repository(可以看做是DAL数据库访问层)

先来看看项目的架构

image

我们现在就开始来做BLL层.  同样,先编写  UserInfoService ,这个就是调用 UserInfoRepository

先添加对项目的引用,Model层,IRepository(数据库访问层的接口),Repository(数据库访问层),由于我们的Model是使用EF的,那么还需要引用System.Data.Entity

image

image

我们先来编写 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

posted @ 2014-03-27 18:02  梨花驿路  阅读(1186)  评论(1编辑  收藏  举报