python三层架构搭建_三层架构搭建(asp.net mvc + ef)

第一次写博客,想了半天先从简单的三层架构开始吧,希望能帮助到你!

简单介绍一下三层架构, 三层架构从上到下分:表现层(UI),业务逻辑层(BLL),数据访问层(DAL)再加上数据模型(Model),用ef访问数据库,Model也就是与数据库表映射的实体。废话少说,上代码。

Model层

为方便说明,新建一个实体模型UserInfo,数据库表中应该对应一个UserInfo表,至于怎样建立表,有多种方式,用ef来建立表比较方便。具体怎样用ef访问数据库,后续会在其他文章中解释,敬请关注。

1 public classUserInfo2 {3 public int Id { get; set; }4 public string Name { get; set; }5 public short Age { get; set; }6 }

DAL层

首先设计通用的CRUD基接口IBaseDal,作为通用的数据库访问通道。

1 public interface IBaseDal where T : class,new()2 {3 voidAdd(T entity);4 voidDelete(T entity);5 voidUpdate(T entity);6 IQueryable GetEntities(Expression>expression);7 IQueryable GetEntitiesByPage(int pageSize, int pageIndex, bool isAsc, Expression> keySelector, Expression>expression);8 boolSaveChanges();9 }

以UserInfo实体为例,继承IBaseDal接口

public interface IUserInfoDal : IBaseDal{

}

接口设计完成,设计通用基类,这里存在变化点,本例用ef实现,如果以后通过其他实体框架或者直接通过ado.net访问数据库,只需要改动这个类。

public class BaseDal where T : class,new()

{private DbContext dbContext =DbContextFactory.DbContext;public voidAdd(T entity)

{

dbContext.Set().Add(entity);

}public voidDelete(T entity)

{

dbContext.Entry(entity).State=EntityState.Deleted;

}public voidUpdate(T entity)

{

dbContext.Entry(entity).State=EntityState.Modified;

}public IQueryable GetEntities(Expression>expression)

{return dbContext.Set().Where(expression);

}public IQueryable GetEntitiesByPage(int pageSize, int pageIndex, bool isAsc, Expression> keySelector, Expression>expression)

{if (isAsc) //升序

{return dbContext.Set().Where(expression).OrderBy(keySelector).Skip((pageIndex - 1) *pageSize).Take(pageSize);

}else //降序

{return dbContext.Set().Where(expression).OrderByDescending(keySelector).Skip((pageIndex - 1) *pageSize).Take(pageSize);

}

}public boolSaveChanges()

{return dbContext.SaveChanges() > 0;

}

}

public static classDbContextFactory

{public staticDbContext DbContext

{get{

DbContext dbContext= CallContext.GetData("DbContext") asDbContext;if (dbContext == null)

{

dbContext= newModelContainer();

CallContext.SetData("DbContext", dbContext);

}returndbContext;

}

}

}

接下来实现具体的实体数据访问层,以UserInfoDal为例,其余类似。

public class UserInfoDal : BaseDal, IUserInfoDal

{

}

BLL层

首先像DAL层一样,定义通用接口。

public interface IBaseService where T : class,new()

{voidAdd(T entity);voidDelete(T entity);voidUpdate(T entity);

IQueryable GetEntities(Expression>expression);

IQueryable GetEntitiesByPage(int pageSize, int pageIndex, bool isAsc, Expression> keySelector, Expression>expression);boolSaveChanges();

}

通用基类,注意通用基类不需要实现上面的接口

public class BaseService where T : class,new()

{private BaseDal baseDal = new BaseDal();public voidAdd(T entity)

{

baseDal.Add(entity);

}public voidDelete(T entity)

{

baseDal.Delete(entity);

}public voidUpdate(T entity)

{

baseDal.Update(entity);

}public IQueryable GetEntities(Expression>expression)

{returnbaseDal.GetEntities(expression);

}public IQueryable GetEntitiesByPage(int pageSize, int pageIndex, bool isAsc, Expression> keySelector, Expression>expression)

{returnbaseDal.GetEntitiesByPage(pageSize, pageIndex, isAsc, keySelector, expression);

}public boolSaveChanges()

{returnbaseDal.SaveChanges();

}

}

接下来是UserInfoService

public class UserInfoService : BaseService, IBaseService{

}

至此,所有底层代码完成,顶层的UI层调用不在赘述了,这里附上源码下载地址

链接:https://pan.baidu.com/s/1itW5XKBYB1onkQDfuwJvMw

提取码:ye0n

说明:源码中Model层中采用的ef的Model First方式创建数据库,下载以后不能直接运行,可以将Model程序集中的Model.edmx.sql在sqlserver创建数据库,以DataBase First方式重新创建Model程序集,可以正常运行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值