您的位置:首页 > Web前端 > Vue.js

.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:公司技术转型,近期考虑换工作中。。

谢谢。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: