Repository模式是否应该在将对象传递给使用者/服务层之前对其进行操作?

时间:2016-05-28 10:29:22

标签: c# entity-framework design-patterns repository

我正在使用的当前解决方案是使用单个Core层构建的,只要需要检索数据就会连接到数据库。

我向几位同事建议我们创建一个DAL层并将所有数据库逻辑移入它自己的项目并调用它

Application.DataAccess

该层将使用Entity Framework和存储库模式作为Application.Core和Application.DataAccess之间的抽象(Repository实现将位于Application.DataAccess中)。

我计划在服务层使用存储库。

public class JobService
{
   private IJobRepository _jobRepository;

   public JobService(IJobRepository repository) 
   {
      _jobRepository = repository;
   }

   public IEnumerable<Job> GetJobs() 
   {
      List<Jobs_AllJobs> allJobs = _jobRepository.GetAllJobs();
      List<Job> result = new List<Job>();

      foreach(job in allJobs) 
      {
        result.Add(new Jobs() { Title = job.Title, OtherEntity = "Internal to the service"; });
      }          

      return result;
  }
}

职位存储库:

public class JobRepository : IRepository<Jobs_AllJobs>
{
     DBContext _jobContext;

     public List<Jobs_AllJobs> GetJobs() 
     {
         return _jobContext.Jobs_AllJobs.ToList();
     }
}

这是我们之间稍微加热的地方。

我相信JobRepository应该返回数据库实体Jobs_AllJobs的列表,而不是操纵数据库实体并构造一个新的Job列表(这应该在服务层中处理)。我的同事认为,操作应该在Repository级别完成,而JobRepository应该传回List<Job>IEnumerable<Job>而不是数据库实体。

根据我的理解,Repository模式意味着抽象出内部数据库实现(Entity Framework / nHibernate / File System),并且只对数据库执行CRUD操作(创建,检索,更新或删除),并且JobService应该执行操纵并构造一个新对象并将其传递给消费者。

哪种方式是正确的?哪种方式最好遵循存储库模式?

0 个答案:

没有答案