业务逻辑层
业务逻辑层是整个系统中最核心的部分,负责处理业务逻辑、数据验证、数据转换等操作。业务逻辑层通常由多个服务组成,每个服务负责处理一种业务逻辑。
服务通常由多个方法组成,每个方法对应一种业务逻辑。服务通常需要依赖数据访问层和数据传输层,以便获取数据和处理数据。
服务示例
以下是一个简单的服务示例,该服务负责处理用户相关业务逻辑:
cs
// 继承自BaseService,传入表对应实体类和主键类型, 并实现ISysUserService接口
public class SysUserService : BaseService<SysUser, int>, ISysUserService
{
// DI服务注册, 注入SysUserRepository
private readonly ISysUserRepository _sysUserRepository;
private readonly IBaseRepository<SysUser, int> _dal;
public SysUserService(ISysUserRepository sysUserRepository, IBaseRepository<SysUser, int> dal)
{
this._dal = dal;
base.BaseRepo = dal;
_sysUserRepository = sysUserRepository;
}
// 添加业务逻辑
public async Task<SysUser> GetByIdAsync(int id)
{
// 调用数据访问层获取数据
var user = await _sysUserRepository.GetByIdAsync(id);
// 调用SqlSugar原生方法
var user_1 = await _dal.Db.Queryable<SysUser>().Where(it => it.Id == id && it.IsDeleted == false).FirstAsync();
// 也可以这样
var user_2 = await _sysUserRepository.Db.Queryable<SysUser>().Where(it => it.Id == id && it.IsDeleted == false).FirstAsync();
// 返回数据
return user;
}
}
// 继承自BaseService,传入表对应实体类和主键类型, 并实现ISysUserService接口
public class SysUserService : BaseService<SysUser, int>, ISysUserService
{
// DI服务注册, 注入SysUserRepository
private readonly ISysUserRepository _sysUserRepository;
private readonly IBaseRepository<SysUser, int> _dal;
public SysUserService(ISysUserRepository sysUserRepository, IBaseRepository<SysUser, int> dal)
{
this._dal = dal;
base.BaseRepo = dal;
_sysUserRepository = sysUserRepository;
}
// 添加业务逻辑
public async Task<SysUser> GetByIdAsync(int id)
{
// 调用数据访问层获取数据
var user = await _sysUserRepository.GetByIdAsync(id);
// 调用SqlSugar原生方法
var user_1 = await _dal.Db.Queryable<SysUser>().Where(it => it.Id == id && it.IsDeleted == false).FirstAsync();
// 也可以这样
var user_2 = await _sysUserRepository.Db.Queryable<SysUser>().Where(it => it.Id == id && it.IsDeleted == false).FirstAsync();
// 返回数据
return user;
}
}
方法特性
在服务中,我们通常会使用一些方法特性来标记方法的用途,例如:
UseTran
: 表示该方法需要在一个事务中执行,如果方法执行失败,事务将会回滚。Caching
: 表示该方法的结果可以被缓存,以提高性能,可以设置缓存时间, 单位:分钟
。
e.g:
cs
[UseTran]
[Caching(AbsoluteExpiration = 5)]
public async Task<SysUser> GetByIdAsync(int id)
{
// 调用数据访问层获取数据
var user = await _sysUserRepository.GetByIdAsync(id);
// 返回数据
return user;
}
[UseTran]
[Caching(AbsoluteExpiration = 5)]
public async Task<SysUser> GetByIdAsync(int id)
{
// 调用数据访问层获取数据
var user = await _sysUserRepository.GetByIdAsync(id);
// 返回数据
return user;
}