Net Core 封装基类Service,优化 CRUD

在很多时候架构上是业务层和控制器分开的 那么业务层也会承担的增删改查的业务 如果是每次在调用仓储层在写一套同样的CRUD 在代码层面有一些冗余 所以写了一套类似ABP 的基类Service 方法

首先新建接口 IBaseService<Models,ViewModel,key>

这是一个泛型接口 Models 代表 实体 ViewModel 可以理解为 DTO Key 代表主键
泛型的设计可以根据自己系统的业务和特点进行重新考虑 可以和我这不一样 更多的是思考怎么解放双手.

  public interface IBaseService<Models,ViewModel,key>
    {
    	// ExecuteResult 是返回值统一实体 对应上自己项目的
    	// IPagedList  是分页实体
        Task<ExecuteResult<Models>> ModelCreate(Models viewModel);
        Task<ExecuteResult> ModelUpdate(Models viewModel);
        Task<ExecuteResult> ModelDelete(key Uid);
        Task<ExecuteResult<Models>> Select(key id);
        Task<ExecuteResult<IList<Models>>> Select(Expression<Func<Models, bool>> expression);
        Task<ExecuteResult<IPagedList<Models>>> SelectPage(int page = 1, int limit = 10);
        Task<ExecuteResult<IPagedList<Models>>> SelectPage(Expression<Func<Models, bool>> expression, int page = 1, int limit = 10);

    }
新建实现类 BaseService
public class BaseService<Models,ViewModel,key>: IBaseService<Models, ViewModel,key> where Models : class{
		// 这里是从基类这里进行一个注入一些常用的对象 我这里是三个
	  public BaseService(IUnitOfWork<Context> unitOfWork, IJwtUtils jwtUtils, IMapper   mapper)
        {
        	// 工作单元
            _unitOfWork = unitOfWork;
            // jwt 
            _jwtUtils=jwtUtils;
            // AutoMapper
            _mapper=mapper;
        }
	... 剩余就是继承实现CRUD 操作 这里的CRUD 就是CRUD 就可以做一些简单的重复验证 剩余的全部交个业务层
}
用户Service
 public interface IUserService:IBaseService<SystemUser, UserViewModel, long>{
		 Task<ExecuteResult<SystemUser>> Create(UserViewModel viewModel)
	// C R  U D   但是昨晚基本业务验证后 就直接调用父类的方法 就省去一直写 c r u d 操作 在配上上一些实体验证应该就没啥了
 }
 public class UserService : BaseService<SystemUser,UserViewModel,long>, IUserService{
			 public async Task<ExecuteResult<SystemUser>> Create(UserViewModel viewModel)
        {
            ExecuteResult<SystemUser> executeResult = new ExecuteResult<SystemUser>();
            // 验证用户 是否存在
            viewModel.RoleId = 1569607246961315841;
            if (viewModel.checkUserexit(_unitOfWork))
            {
                executeResult.SetFailMessage("账户或邮箱已存在 请重新输入!");
                return executeResult;
            }
            if(!viewModel.checkUserRolesAsync(_unitOfWork)) {
                executeResult.SetFailMessage("用户角色异常 请重新创建!");
                return executeResult;
            }   
            // 进行转换    
            SystemUser systemUser=_mapper.Map<SystemUser>(viewModel);
            systemUser.Id=NextId();
            systemUser.CreateTime = DateTime.Now;
            systemUser.Creator =_jwtUtils.GetCurrentUserInfo().Id;
            return await base.ModelCreate(systemUser);
        }
 }
注意事项 记住注入一下对象 基类不用 Service 注入一下就可以了。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值