其他分享
首页 > 其他分享> > Intern Day112 - .NET开发中对IRepository接口的理解

Intern Day112 - .NET开发中对IRepository接口的理解

作者:互联网

为什么要用Repository

总结出Repository的作用就是:在项目中把一些 常用&代码量较多的代码 封装Repository 中,然后再用去访问,避免代码冗余、不优雅。

借用https://www.cnblogs.com/jake1/archive/2013/04/23/3039101.html中的一段文字,总结的很好:

Repository在项目中的使用

本来我们访问数据库是这样的:

public void Test()
{
	 // 直接用 _unitofwork.DbContext.xxx去访问
	_unitofwork.DbContext.xxx.Skip(3).Take(2).ToList();
}

用了Repository后是这样的:

namespace xxx.xxx.xxx.Application.Services
{
    public class RoleService : IRoleService
    {
	 // Repository和UnitOfWork定义 和下面一一对应
          private readonly IUnitOfWork<xxxDbContext> _unitofwork; // 1
          private readonly IxxxPrincipal _principal; // 2
          private readonly IRepository<Study> _studyRepository; // 3
          private readonly IRepository<PeopleRole> _roleRepository; // 4

          public RoleService(IUnitOfWork<xxxDbContext> unitofwork, IxxxPrincipal principal)
          {
                _unitofwork = unitofwork; // 1
                _principal = principal; // 2
                _studyRepository = _unitofwork.GetRepository<Study>(); // 3
                _roleRepository = _unitofwork.GetRepository<PeopleRole>(); // 4
          }

          // 创建角色
          public async Task<CreateRoleOutput> CreateRole(CreateRoleInput input)
          {
                var study = await _studyRepository.FindAsync(input.StudyId);

                var role = new PeopleRole
                {
                      StudyId = input.StudyId
                };

                await _roleRepository.InsertAsync(role);

                await _unitofwork.SaveChangesAsync();

                return new CreateRoleOutput
                {
                      StudyId = role.StudyId,
                      Id = role.Id
                };
          }

          // 查询角色
          public async Task<RoleOutput> GetRole(GetRoleInput input)
          {
                var role = await _roleRepository.Query(x => x.Id == input.RoleId)
							 .Where(x => x.StudyId == input.StudyId)
							 .FirstAsync(); // LINQ+Lambda语法
                return new RoleOutput
                {

                      StudyId = role.StudyId,
                      Id = role.Id
                };
          }

          // …………

    }
}

EF和Repository等之间关系

关于EF、Repository、Factory、Service之间的关系详情代码可见:https://www.cnblogs.com/panpanwelcome/p/7357244.html

该文总结如下:

Respository查询的性能问题

关于Respository查询的性能问题可以看下这个(但是一般用不到),具体可见该链接下讨论到的一些问题:https://q.cnblogs.com/q/70931

标签:Day112,Repository,IRepository,StudyId,Intern,unitofwork,input,role,public
来源: https://www.cnblogs.com/OFSHK/p/14866134.html