Skip to content

业务逻辑层

业务逻辑层是整个系统中最核心的部分,负责处理业务逻辑、数据验证、数据转换等操作。业务逻辑层通常由多个服务组成,每个服务负责处理一种业务逻辑。

服务通常由多个方法组成,每个方法对应一种业务逻辑。服务通常需要依赖数据访问层和数据传输层,以便获取数据和处理数据。

服务示例

以下是一个简单的服务示例,该服务负责处理用户相关业务逻辑:

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;
}