存储库模式和服务层

时间:2017-04-21 22:38:06

标签: asp.net-mvc repository-pattern n-tier-architecture service-layer

似乎存储库模式负责CRUD操作和数据访问方法(例如:存储过程),服务层正在利用存储库的方法来继续工作。

我的问题是,我是否可以将方法放在不使用其存储库方法的服务层中?

例如,如果我的存储库有这些方法,

public interface IRepository<T>
{        
    void Add(T entity);
    void Update(T entity);
    void Delete(T entity);
}

和IStudentService类

public interface IStudentService
{
    void AddNewStudent(Student student);
    void UpdateStudent(Student student);
    void DeleteStudent(Student student);

    ExcelImportVM GetStudentExcelExport(List<Students> list);
    List<SelectListItem> GetDateRange();
}

和StudentService类实现:

public class StudentService : IStudentService
    {
        private IStudentRepository _repository;    

        public ShopLevelDashService(IStudentRepository repository)
        {
            _repository= repository;          
        }

        public void AddNewStudent(Student student) 
        {
            return _repository.Add(student);
        }

        // ..UpdateStudent & DeleteStudent methods

        public List<SelectListItem> GetDateRange()
        {
           var dateRange = new List<ColumnValuesVM>()
           {
              new ColumnValuesVM { Id = 1, Value = "test" },
              new ColumnValuesVM { Id = 2, Value = "test2" }
           };

           var selectList = new List<SelectListItem>();

           // ..foreach

           return selectList;
       }

       ExcelImportVM GetStudentExcelExport(List<Students> list) 
       {
           // ..codes

           return viewModel;
       }
    }

StudentExcelExport()GetDateRange()等方法放在不使用其存储库中的方法的服务类中是否有意义? (例如:_repository.GetDateRange()

或者将它们放在控制器中会更好吗?

1 个答案:

答案 0 :(得分:0)

正如@Chetan指出的那样,服务层是您的数据访问层(DAL)。因此,在您的服务中使用StudentExcelExport()GetDateRange()不是最佳做法。服务层应该只有处理数据库操作的方法。

由于您的两种方法只是准备视图组件,因此应该在控制器级别。对于其他复杂逻辑,您可以使用业务逻辑层而不是与DAL混合。

  

或者将它们放在控制器中会更好吗?

将答案放在控制器中。

希望这有帮助!