.netCore+Vue 搭建的简捷开发框架 (3)-- Services层实现
2019-09-23 09:52
357 查看
继续交作业:
上一篇作业中我们实现了 Repository仓储层的应用。并为我们的框架引入了EFCore 详见:
.netCore+Vue 搭建的简捷开发框架 (2)--仓储层实现和EFCore 的使用
接下来我们继续来实现Services 层,同样,我们在Services 和IServices 中增加 Base 文件夹。并创建BaseServices.cs 和IBaseServices.cs
如图:
using Sincere.Core.IRepository.Base; using Sincere.Core.IServices.Base; using Sincere.Core.Model; using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; namespace Sincere.Core.Services.Base { public class BaseServices<TEntity> : IBaseServices<TEntity> where TEntity : class, new() { //public IBaseRepository<TEntity> baseDal = new BaseRepository<TEntity>(); public IBaseRepository<TEntity> BaseDal;//通过在子类的构造函数中注入,这里是基类,不用构造函数 public async Task<int> Del(TEntity model) { return await BaseDal.Del(model); } public async Task<int> DelBy(Expression<Func<TEntity, bool>> delWhere) { return await BaseDal.DelBy(delWhere); } public async Task<int> Execute(string sql, List<SqlParameter> parms, CommandType cmdType = CommandType.Text) { return await BaseDal.Execute(sql,parms,cmdType); } public async Task<List<TEntity>> GetList() { return await BaseDal.GetList(); } public async Task<List<TEntity>> GetListBy(Expression<Func<TEntity, bool>> whereLambda) { return await BaseDal.GetListBy(whereLambda); } public async Task<List<TEntity>> GetListBy<TKey>(Expression<Func<TEntity, bool>> whereLambda, Expression<Func<TEntity, TKey>> orderLambda, bool isAsc = true) { return await BaseDal.GetListBy(whereLambda,orderLambda,isAsc); } public async Task<List<TEntity>> GetListBy<TKey>(int top, Expression<Func<TEntity, bool>> whereLambda, Expression<Func<TEntity, TKey>> orderLambda, bool isAsc = true) { return await BaseDal.GetListBy(top, whereLambda, orderLambda, isAsc); } public async Task<List<TEntity>> GetListBy<TKey1, TKey2>(Expression<Func<TEntity, bool>> whereLambda, Expression<Func<TEntity, TKey1>> orderLambda1, Expression<Func<TEntity, TKey2>> orderLambda2, bool isAsc1 = true, bool isAsc2 = true) { return await BaseDal.GetListBy( whereLambda, orderLambda1,orderLambda2, isAsc1,isAsc2); } public async Task<List<TEntity>> GetListBy<TKey1, TKey2>(int top, Expression<Func<TEntity, bool>> whereLambda, Expression<Func<TEntity, TKey1>> orderLambda1, Expression<Func<TEntity, TKey2>> orderLambda2, bool isAsc1 = true, bool isAsc2 = true) { return await BaseDal.GetListBy(top, whereLambda, orderLambda1, orderLambda2, isAsc1, isAsc2); } public async Task<TEntity> GetModelById(Expression<Func<TEntity, bool>> whereLambda) { return await BaseDal.GetModelById( whereLambda); } public async Task<List<TEntity>> GetPagedList<TKey>(int pageIndex, int pageSize, Expression<Func<TEntity, bool>> whereLambda, Expression<Func<TEntity, TKey>> orderByLambda, bool isAsc = true) { return await BaseDal.GetPagedList(pageIndex,pageSize, whereLambda,orderByLambda,isAsc); } public async Task<PageModel<TEntity>> GetPagedList<TKey>(Expression<Func<TEntity, bool>> whereLambda, Expression<Func<TEntity, TKey>> orderByLambda, bool isAsc = true, int pageIndex = 1, int pageSize = 20) { return await BaseDal.GetPagedList( whereLambda, orderByLambda, isAsc, pageIndex, pageSize); } public async Task<bool> Insert(TEntity model) { return await BaseDal.Insert(model); } public async Task<bool> InsertRange(List<TEntity> datas) { return await BaseDal.InsertRange(datas); } public async Task<int> Modify(TEntity model) { return await BaseDal.Modify(model); } public async Task<int> Modify(TEntity model, params string[] propertyNames) { return await BaseDal.Modify(model,propertyNames); } public async Task<int> ModifyBy(TEntity model, Expression<Func<TEntity, bool>> whereLambda, params string[] modifiedPropertyNames) { return await BaseDal.ModifyBy(model, whereLambda,modifiedPropertyNames); } public async Task<List<TEntity>> Query(string sql, List<SqlParameter> parms, CommandType cmdType = CommandType.Text) { return await BaseDal.Query(sql, parms, cmdType); } public void RollBackChanges() { BaseDal.RollBackChanges(); } } }BaseServices
using Sincere.Core.Model; using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; namespace Sincere.Core.IServices.Base { public interface IBaseServices<TEntity> where TEntity : class { Task<int> Execute(string sql, List<SqlParameter> parms, CommandType cmdType = CommandType.Text); Task<List<TEntity>> Query(string sql, List<SqlParameter> parms, CommandType cmdType = CommandType.Text); Task<bool> Insert(TEntity model); Task<bool> InsertRange(List<TEntity> datas); Task<int> Del(TEntity model); Task<int> DelBy(Expression<Func<TEntity, bool>> delWhere); Task<int> Modify(TEntity model); Task<int> Modify(TEntity model, params string[] propertyNames); Task<int> ModifyBy(TEntity model, Expression<Func<TEntity, bool>> whereLambda, params string[] modifiedPropertyNames); Task<List<TEntity>> GetList(); Task<List<TEntity>> GetListBy(Expression<Func<TEntity, bool>> whereLambda); Task<TEntity> GetModelById(Expression<Func<TEntity, bool>> whereLambda); Task<List<TEntity>> GetListBy<TKey>(Expression<Func<TEntity, bool>> whereLambda, Expression<Func<TEntity, TKey>> orderLambda, bool isAsc = true); Task<List<TEntity>> GetListBy<TKey>(int top, Expression<Func<TEntity, bool>> whereLambda, Expression<Func<TEntity, TKey>> orderLambda, bool isAsc = true); Task<List<TEntity>> GetListBy<TKey1, TKey2>(Expression<Func<TEntity, bool>> whereLambda, Expression<Func<TEntity, TKey1>> orderLambda1, Expression<Func<TEntity, TKey2>> orderLambda2, bool isAsc1 = true, bool isAsc2 = true); Task<List<TEntity>> GetListBy<TKey1, TKey2>(int top, Expression<Func<TEntity, bool>> whereLambda, Expression<Func<TEntity, TKey1>> orderLambda1, Expression<Func<TEntity, TKey2>> orderLambda2, bool isAsc1 = true, bool isAsc2 = true); Task<List<TEntity>> GetPagedList<TKey>(int pageIndex, int pageSize, Expression<Func<TEntity, bool>> whereLambda, Expression<Func<TEntity, TKey>> orderByLambda, bool isAsc = true); Task<PageModel<TEntity>> GetPagedList<TKey>(Expression<Func<TEntity, bool>> whereLambda, Expression<Func<TEntity, TKey>> orderByLambda, bool isAsc = true, int pageIndex = 1, int pageSize = 20); void RollBackChanges(); } }IBaseServices.cs 需要说明的是,在BaseServices.cs 中我们通过依赖注入的方式引入了IBaseRepository 。
using Sincere.Core.IRepository.Base; using Sincere.Core.Model.Models; using System; using System.Collections.Generic; using System.Text; namespace Sincere.Core.IRepository { public interface IAdvertisementRepository : IBaseRepository<Advertisement> { } }View Code 接下来是AdvertisementRepository.cs ,这里继承自BaseRepository<Advertisement>, 并实现 IAdvertisementRepository接口。代码如下:
using Sincere.Core.IRepository; using Sincere.Core.Model.EFCore; using Sincere.Core.Model.Models; using Sincere.Core.Repository.Base; using System; using System.Collections.Generic; using System.Text; namespace Sincere.Core.Repository { public class AdvertisementRepository : BaseRepository<Advertisement>, IAdvertisementRepository { public AdvertisementRepository(IBaseContext mydbcontext) : base(mydbcontext) { } } }View Code
这里需要说明的是,因为我在BaseRepository 的构造函数中,使用了有参数的构造函数
public BaseRepository(IBaseContext mydbcontext)
{
this._db = mydbcontext as BaseCoreContext;
this._dbSet = _db.Set<TEntity>();
}
所以在AdvertisementRepository 中,将注入的mydbContext 同步注入到BaseRepository 中。
using Sincere.Core.IServices.Base; using Sincere.Core.Model.Models; using System; using System.Collections.Generic; using System.Text; namespace Sincere.Core.IServices { public interface IAdvertisementServices : IBaseServices<Advertisement> { void ReadAllAd(); } }View Code 最后就是AdvertisementServices了,未来的开发中,我们大部分的业务逻辑都将在这里实现,于仓储层的实现类似,也是继承: BaseServices<Advertisement>, 实现 IAdvertisementServices接口。
代码如下:
using Sincere.Core.IRepository; using Sincere.Core.IRepository.Base; using Sincere.Core.IServices; using Sincere.Core.Model.Models; using Sincere.Core.Services.Base; using System; using System.Collections.Generic; using System.Text; namespace Sincere.Core.Services { public class AdvertisementServices : BaseServices<Advertisement>, IAdvertisementServices { IAdvertisementRepository _advertisementRepository; public AdvertisementServices(IBaseRepository<Advertisement> baseRepository) { base.BaseDal = baseRepository; _advertisementRepository = baseRepository as IAdvertisementRepository; } public void ReadAllAd() { } } }View Code
这里有些地方需要进行一下说明。首先就是通过依赖注入的方式,将IBaseRepository 注入进来。
在ReadAllAd 方法中的引用如上图所示。
到此为止,各个层中的实现就都完成了。但是我们在Controller 中该怎么引用呢?
这个地方涉及的东西比较多,比如NetCore 的依赖注入、利用反射机制进行注入、NetCore 的Startup.cs 类等内容。准备用下一节的内容来进行整体说明。谢谢。
PS:公司技术转型,近期考虑换工作中。。
谢谢。
相关文章推荐
- .netCore+Vue 搭建的简捷开发框架--目录
- .netCore+Vue 搭建的简捷开发框架 (5)
- .netCore+Vue 搭建的简捷开发框架 (4)--NetCore 基础 -2
- 搭建开发框架Express,实现Web网站登录验证
- 搭建开发框架Express,实现Web网站登录验证
- 搭建开发框架Express,实现Web网站登录验证
- Vue+ElementUI+.netcore前后端分离框架开发项目实战
- NodeJS学习笔记(一)——搭建开发框架Express,实现Web网站登录验证
- Spring4.X + Spring MVC + Mybatis3 零配置应用开发框架搭建详解(4) - Scheduled注解实现任务调度
- 【Apache Mina2.0开发之一】搭建Apache Mina框架并实现Server与Client端消息传递 推荐
- Spring4.X + Spring MVC + Mybatis3 零配置应用开发框架搭建详解(4) - Scheduled注解实现任务调度
- 【APACHE MINA2.0开发之一】搭建APACHE MINA框架并实现SERVER与CLIENT端的简单消息传递!
- vue前端开发项目框架搭建(node+webpack+vue)
- 浅析ButterKnife的实现 (一) —— 搭建开发框架
- NodeJS学习笔记(一)——搭建开发框架Express,实现Web网站登录验证
- Android实际开发中的首页框架搭建(二、首页框架实现)
- 搭建开发框架Express,实现Web网站登录验证
- NodeJS学习笔记(一)——搭建开发框架Express,实现Web网站登录验证
- 浅析ButterKnife的实现 (一) —— 搭建开发框架
- [c#]asp.net开发微信公众平台(2)多层架构框架搭建和入口实现