我正在使用的当前解决方案是使用单个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应该执行操纵并构造一个新对象并将其传递给消费者。
哪种方式是正确的?哪种方式最好遵循存储库模式?